并排打印方阵旋转C

时间:2018-08-13 11:34:32

标签: c arrays multidimensional-array

我正在研究一个函数,该函数采用一个正方形矩阵(2D数组),将其旋转90度,然后打印所有4圈。我一直在做的是并排打印这些旋转,而不是直接在彼此下面。 给定下面显示的第一个矩阵,这就是我能够产生的:

123
123
123

111
222
333

321
321
321

333
222
111

我想要实现的目标:

123  111  321  333
123  222  321  222
123  333  321  111

任何帮助我解决问题的方法都非常感激,因为我已经死了,什么也无法工作。

代码:

//get transformation of matrix
for(num_rotations = 0;num_rotations < 3;num_rotations++){
    for(row=0;row<num_rows;row++){
        for(col=0;col<3;col++){
            temp_arr[row][col] = working_arr[col][row];
        }
    }
}

在第一个“ for”循环中,然后重复第二个和第三个“ for”循环,最后一行替换为:

working_arr[row][col] = temp_arr[row][3-col-1];//reverse columns for a single rotation

在第一个“ for”循环的末尾放置一个打印语句。

2 个答案:

答案 0 :(得分:1)

如果只需要打印它,可以执行类似的操作

for(int i=0; i<n; ++i)
{
    for(int j=0; j<n; ++j)
    {
        printf("%3d", arr[i][j]);
    }
    printf("\t");

    for(int j=0; j<n; ++j)
    {
        printf("%3d", arr[n-1-j][i]);
    }
    printf("\t");

    for(int j=n-1; j>=0; --j)
    {
        printf("%3d", arr[n-1-i][j]);
    }
    printf("\t");

    for(int j=0; j<n; ++j)
    {
        printf("%3d", arr[j][n-1-i]);
    }
    printf("\n");
}

其中arr具有大小为n的矩阵。

在这里,适当的索引范围用于从原始矩阵一次打印一行的旋转版本,而无需修改原始矩阵。

答案 1 :(得分:0)

除非您存储所有4个2D数组并一次全部打印一次,否则很难。

另一个(混乱的)想法是使用gotoxy()将光标放置在屏幕上所需的位置,并在旋转时打印2D数组的元素。 How to position the input text cursor in C?