2012-11-08 51 views
2

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

有谁知道如何去做这个? 这是我到目前为止有:

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

回答

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

通过这种方式,它将首先打印底部行,列不变。

+0

我是否保持在同一个地方?因为它没有正确打印。它将它与另一个数组混合,因为它正在通过外部循环,然后在外部循环中执行BOTHER循环,并将它们一起粉碎...... – Peanut

+0

@Peanut:我明白了。如果你保持在同一个循环中,那么它将不会打印正确的值,因为你的数组没有被完全赋值。把它移到外面。我更新了答案。 –

+0

@Peanut:你试过更新的答案了吗?任何问题? –

0

代替嵌套交换了所有的元素在你的逆转for循环中,你可以for循环做1如下:

  • 交换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]是指向该特定行的指针。所以你可以在不触及值的情况下交换指针。

+0

我在哪里可以把它放在我的代码中?我将如何开始在阵列中切换第二个[] .. – Peanut

+0

再次,这只显示我如何交换单个阵列..而不是2D阵列... – Peanut