好吧,我很好地填充了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;
}
答案 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]
是指向该特定行的指针。因此,您可以在不触及值的情况下交换指针。