我有一个 6 x 6 矩阵,我将其值存储在一个大小为 36 的一维数组中。我想重新排列它,以便行是列,列是行。我的方法是尝试将值复制到另一个数组中,但排序正确。我正在尝试一个 for 循环:
for (int i = 0; i < 6; ++i){
copyArray[i]= array[i*6];
}
这对于由第一列组成的第一个新行来说工作正常,但我如何继续做所有这些?我试过嵌套 for 循环,但无法使用迭代器提出正确的算法。我可以手动执行此操作,但希望通过代码完成此操作。
我正在用 C++ 编写代码,但如果有人能用类似的语言来编写代码,那就太好了。我觉得这是一道数学题。
问题:如何解决切换行和列的问题? (示例:如果我将第一行和第一列表示为 0,在 6x6 矩阵中,那么行和列都从 0 变为 5。因此,通过切换行和列,第 2 行第 5 列中的值将被切换第 5 行第 2 列中的值。)
最佳答案
难道你不能只使用嵌套的 for
循环来做这样的事情吗?
for (int i = 0; i < 6; ++i)
for (int j = 0; j < 6; ++j)
copyArray[i*6+j]= array[j*6+i];
这是一个测试程序,您可以运行它来证明它有效:
#include <stdio.h>
int main()
{
int array[36] = {1,1,1,1,1,1,
2,2,2,2,2,2,
3,3,3,3,3,3,
4,4,4,4,4,4,
5,5,5,5,5,5,
6,6,6,6,6,6};
int copyarray[36];
for (int i = 0; i < 6; ++i)
for (int j = 0; j < 6; ++j)
copyarray[i*6+j]= array[j*6+i];
for (int i = 0; i < 36; ++i)
{
if (i % 6 == 0)
printf("\n");
printf("%d ", array[i]);
}
printf("\n");
printf("\n");
for (int i = 0; i < 36; ++i)
{
if (i % 6 == 0)
printf("\n");
printf("%d ", copyarray[i]);
}
return 0;
}
输出:
1 1 1 1 1 1
2 2 2 2 2 2
3 3 3 3 3 3
4 4 4 4 4 4
5 5 5 5 5 5
6 6 6 6 6 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
关于c++ - 在 C++ 中切换矩阵列和行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27325998/