2

好的,我很好地填充了 2D 数组......现在我需要保留随机生成到 2D 数组中的相同值,但颠倒垂直顺序(第二个 for 循环)。所以基本上第二个 for 循环需要保持相同的值,但顺序相反。但我觉得如果我进入嵌套的 for 循环和 rand(),它会生成所有新的随机字母......

有谁知道该怎么做?这是我到目前为止所拥有的:

char array[20][20];

srand(time(NULL));

for(int i=0;i<20;i++)
 {
     for(int j=0;j<20;j++) {
         array[i][j]= ((rand() % 2) == 0) ? 'O' : 'X';
         cout << array[i][j];
     }
     cout << endl;

     for(int j=20-1; i>=0; i-- {
         array[i][j]= ((rand() % 2) == 0) ? 'O' : 'X';
         cout << array[j][i];
     }
     cout << endl;
 }

编辑对于任何对如何解决此问题感到好奇的人,我想通了!!这是代码:

char array[20][20];

srand(time(NULL));

for(int i=0;i<20;i++) {
     for(int j=0;j<20;j++) {
         array[i][j]= ((rand() % 2) == 0) ? 'O' : 'X';
         cout << array[i][j];
     }
     cout << endl;
}

cout << endl;

for(int i=0;i<20;i++) {
    for(int j=19;j>=0;j--) {
        cout << array[i][j];
    }
    cout << endl;
}
4

2 回答 2

0

你这个条件看起来不太好:

  `for(int j=20-1; i>=0; i-- {` 

因为它把循环索引变量改回了0,这将使我们的循环无限期地运行。

另外我认为您不需要在第二个循环中分配新值(您想保留第一个循环中的值)

相反,它应该是(在当前循环之外):

  for(int i=19;i>=0;i--)
  {
    for(int j=0;j<20;j++) {
       //no need of line below as you want to print the old values
       //array[i][j]= ((rand() % 2) == 0) ? 'O' : 'X'; 
       cout << array[i][j];
     }
  }

这样,它将首先打印底行,而列不变。

于 2012-11-08T01:25:05.390 回答
0

无需使用嵌套的 for 循环交换反转中的所有元素,您只需执行 1 个 for 循环,如下所示:

  • 交换array[0]_array[19]
  • 交换array[1]_array[18]
  • ... 等等

伪代码:

int i;
int size = 20;
int bound = size / 2;
for(i = 0; i < bound; i++) {
     swap(array[i], array[bound-i]);
}

原因array[i]是指向该特定行的指针。因此,您可以在不触及值的情况下交换指针。

于 2012-11-08T01:25:34.910 回答