2012-11-08 81 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