我有一个代码,其中数字1必须由行替换0,如下所示:
的数据
下面是它的代码:
int field[y][x] =
{
{0, 0, 0},
{0, 0, 0},
{0, 0, 0}
};
int main()
{
showField(); //Show field
cout << endl;
again:
for (int i = 0; i < y; i++)
{
for (int j = 0; j < x; j++)
{
if (j > 0)
{
field[i][j - 1] = 0;
}
field[i][j] = 1;
countTimeSec(); //updates the board per second
}
if (i == 2)
{
field[i][y - 1] = 0;
goto again;
}
else
{
field[i][y - 1] = 0;
}
}
showField();
return 0;
}
void countTimeSec()
{
int oneSec = 0;
while (oneSec < 15)
{
showField();
oneSec++;
system("cls");
}
}
字符串
我想知道如何修改代码,使算法像这样:
如果会有任何逻辑如何使它,我也将赞赏,
1条答案
按热度按时间yfwxisqw1#
首先,考虑如何旋转1D数组中的数字。当旋转图片中显示的矩阵时,基本上是旋转:
字符串
对于单元素旋转,方法为:
1.设
x
为最后一个元素1.将所有元素右移一位
1.将第一个元素设置为
x
在2D中,你做的是完全相同的事情,除了你必须将2D位置Map到1D位置:
型
这样,旋转可以在1D中实现:
型
最后是驱动程序代码:
型
程序输出(https://godbolt.org/z/Ghr5bqbGc):
进一步说明
如果可能的话,避免向后-
goto
。在原始代码中,其形式为:型
.你本可以这样写:
型
虽然这看起来可能更复杂,但
while (1)
循环可以立即清楚地表明重复正在进行,以及在什么范围内。在这种情况下,您还可以通过创建一个
型
.变量,您可以在
for
循环期间更新该变量,并在周围的while
循环中进行检查。