我正在研究一个函数,该函数采用一个正方形矩阵(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”循环的末尾放置一个打印语句。
答案 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?