【问题标题】:Print square matrix rotations side by side C并排打印方阵旋转 C
【发布时间】:2018-08-13 11:34:32
【问题描述】:

我正在开发一个函数,该函数采用方阵(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”循环的末尾。

【问题讨论】:

  • 您的示例代码在哪里?
  • 我认为它就像在某处添加另一个或两个循环一样简单......但我真的不知道从哪里开始。
  • 先计算,再打印。
  • 除非您想不断地重新计算旋转矩阵,否则您需要收集完整的 4 个矩阵。然后您可以逐步遍历 4 个矩阵,将每个矩阵的第一行打印在一行上,每一行的第二行放在下一个,以此类推。您可以根据需要重新计算每次旋转,但是……嗯,有一个时空权衡。对于小型矩阵,重新计算可能无关紧要;对于中等矩阵,计算一次就成为一种好处,直到矩阵太大以至于存储所有 4 个矩阵都是有问题的。

标签: c arrays multidimensional-array


【解决方案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

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

【讨论】:

    【解决方案2】:

    除非您存储所有 4 个二维数组并在最后一次打印它们,否则这非常困难。

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

    【讨论】:

      猜你喜欢
      • 2018-05-14
      • 1970-01-01
      • 2017-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-23
      • 2014-08-10
      • 1970-01-01
      相关资源
      最近更新 更多