对角阵列输入

时间:2013-11-19 00:51:37

标签: arrays algorithm multidimensional-array pascal freepascal

我有一个2D数组(StartingArray)NxN(例如3x3)。我希望我的其他两个数组(LRotateArrayRRotateArray)左右旋转45度StartingArrayLRotateArrayRRotateArray中的每一行都是StartingArray)中的对角线:

StartingArray:
1 2 3
4 5 6
7 8 9

LRotateArray:
1
4 2
7 5 3
8 6
9

RRotateArray:
7
4 8
1 5 9 
2 6
3

我想在输入LRotateArray时修改RRotateArrayStartingArray

我找到了一个允许我生成LRotateArray的公式:

if StartingArray[i][j]=k then L_j=i+j
if j>(N-1-i) then  L_i=N-i-j else L_i=i
LRotateArray[L_i][L_j]=k

有没有简单的方法可以将LRotateArray转换为RRotateArray,还是我必须找到另一个类似上面的公式?

1 个答案:

答案 0 :(得分:1)

来自RRotateArray的恕我办公大楼StartingArray比从LRotateArray构建它更容易。这就是我实现两种旋转的方式:

for Row := 0 to N - 1 do
begin
  for Col := 0 to N - 1 do
  begin
    LeftRow := Col + Row;
    LeftCol := Min(Col, N - 1 - Row);
    LRotateArray[LeftCol, LeftRow] := StartingArray [Col, Row];

    RightRow := Col + (N - Row - 1);
    RightCol := Min(Col, Row);
    RRotateArray[RightCol, RightRow] := StartingArray [Col, Row];
  end;
end;