垂直反转2d数组?

时间:2012-11-08 01:21:39

标签: c++

好吧,我很好地填充了2D数组......现在我需要保持随机生成到2D数组中的相同值,但是反转垂直的顺序(第2个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;
 }

EDIT 对于任何对如何解决这个问题感到好奇的人,我都明白了! 这是代码:

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;
}

2 个答案:

答案 0 :(得分: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];
     }
  }

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

答案 1 :(得分: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]是指向该特定行的指针。因此,您可以在不触及值的情况下交换指针。