这是我从9 AM开始尝试做的一项学校作业,但我在此过程中迷路了。现在我忘记了;同时声明一些东西。随你。如您所见,我的问题是以下任务。我到了这一点。从output1的差异中可以看出,我的程序过度迭代了自己,我将尝试用英语来描述它:例如,如果位置是这样,则将H迭代到I:IHH将两个H迭代到I,是一个额外的转弯。为了更好地理解,请检查预期的输出1和输出1我采取
传染病模拟
您的任务是模拟传染病的传染过程。该环境将以10x10网格的形式提供。网格的每个单元格都将包含字符“ H”,“ I”和“-”之一,其中“ H”代表健康,“ I”代表感染者。 “-”表示此单元格未被任何人占用;换句话说,它是空的。
[在模拟的每一步(针对每一代),感染者都会感染他/她附近所有健康的人。它们只能通过向上,向下,向右和向左的方向进行感染。对角线感染是不可能的。
模拟步骤的数量将作为输入提供,您将相应地运行模拟。最后一个模拟步骤完成后,您将打印网格的状态。
[虽然您正在计算下一代,但是您将仅考虑上一代的状态。
输入格式:
在网格的每一行之后,将给出一个新行'\ n'字符。读取网格后,您应该从输入中读取模拟数量。
示例输入和输出:
INPUT 1:
--IHH---I-
-H--------
----------
----H-----
----IH----
----H-----
----H-----
-H--------
---------I
-HI--H---I
1
预期的输出1:
--IIH---I-
-H--------
----------
----I-----
----II----
----I-----
----H-----
-H--------
---------I
-II--H---I
我得到1输出
--III---I-
-H--------
----------
----I-----
----II----
----I-----
----I-----
-H--------
---------I
-II--H---I
输入2:
--IHH---I-
-H--------
----------
----H-----
----IH----
----H-----
----H-----
-H--------
---------I
-HI--H---I
3
预期的输出2:
--III---I-
-H--------
----------
----I-----
----II----
----I-----
----I-----
-H--------
---------I
-II--H---I
我得到的输出2
--III---I-
-H--------
----------
----I-----
----II----
----I-----
----I-----
-H--------
---------I
-II--H---I
这是代码ı为此编写的:
#include <stdio.h>
int main()
{
char x;
char grid[10][10] = {0};
int i,j,n,c;
for(i = 0; i < 10; i++)
{
for(j = 0; j < 10 ; j++)
{
scanf(" %c", &x);
grid[i][j] = x;
}
}
c = 1;
scanf("%d",&n);
do
{
for(i = 0; i < 10 ; i++)
{
for(j = 0 ; j < 10 ; j++ )
{
if (grid[i][j] == 'I' && grid[i][j+1] == 'H')
{
grid[i][j+1] = 'I';
}
if (grid[i][j] == 'I' && grid[i][j-1] == 'H' && j>0)
{
grid[i][j-1] = 'I';
}
if (grid[i][j] == 'I' && grid[i+1][j] == 'H')
{
grid[i+1][j] = 'I';
}
if (grid[i][j] == 'I' && grid[i-1][j] == 'H' && i>0)
{
grid[i-1][j] = 'I';
}
}
}
c++;
}
while(c<n);
for(i = 0; i < 10; i++)
{
for(j = 0; j < 10 ; j++)
{
printf("%c",grid[i][j]);
}
printf("\n");
}
printf("\n");
return 0;
}
此行是错误的:
for(j = 0; j < 11 ; j++)
[我可以建议您不要在循环和数组定义中使用文字值,而应使用类似以下内容:
#define MAX_I 10
#define MAX_J 10
然后您的代码开始变得像:
char grid[MAX_I][MAX_J] = {0};
和
for(j = 0; j < MAX_J; j++)
此外,在测试相邻数组位置时,您还需要对检查语句进行如下限制:
grid[i+1][j]
和
grid[i-1][j]