C -在二维数组中反射值



我在c语言中遇到了一些麻烦,我有一个二维数组,看起来像这样:

0 5 5 5
0 0 5 5
0 0 0 5
0 0 0 0

我想在对角线上反射5所以它看起来是这样的

0 0 0 0
5 0 0 0
5 5 0 0
5 5 5 0

这是我的:

//reflect the 5's
for(i = 0; i < arraySize; i++) {
    for (j = 0; j < arraySize; j++) {
        int temp = array[i][j];
        array[i][j] = array[j][i];
        array[j][i] = temp;
    }
}

它没有反映5,当我在这之后打印出数组时,它看起来和我初始化的数组一样。我觉得这是我应该做的,但我做错了吗?谢谢你的帮助。

在交换值时,必须在循环进行到一半时停止,否则会将它们交换回开始的位置!

正如我在评论中提到的,因为你在整个矩阵上迭代,你确实是在反射,但是当你走到对角线以下时,你就把5反射回原来的位置。内循环应该从i+1开始,这将使您保持在对角线之上:

for (j = i+1; j < arraySize; j++) {
         ^^^

正如一位评论者指出的那样,当您在对角线下面迭代时,您会反射回来,取消您刚刚进行的交换。

你的数组总是正方形的吗?如果是这样,这应该可以为您工作:

for(i = 0; i < arraySize; i++) {
    for (j = i+1; j < arraySize; j++) {

这是有效的,因为i也告诉我们沿着对角线应该开始多远。我们添加+1,因为我们不需要交换对角线的中间值。

一般:交换([我][j], [j][我])j = i + 1 . . arrSize

//reflect the 5's
for(i = 0; i < arraySize; i++) {
    for (j = i+1; j < arraySize; j++) {
        int temp = array[i][j];
        array[i][j] = array[j][i];
        array[j][i] = temp;
    }
}

相关内容

  • 没有找到相关文章

最新更新