c-我的嵌套循环迭代-传染病模拟



这是一项学校作业,我从早上9点就开始尝试,但在这个过程中迷路了。现在ı忘记了;同时声明某事。无论什么正如你所看到的,我的问题是以下任务。我说到这一点。正如你从output1的差异中看到的那样,我的程序会迭代自己,我会尝试用英语描述这一点:例如,如果位置是这样的,它会迭代H到I:IHH它会迭代两个H到I,这是一个额外的回合。为了更好地理解,请检查预期输出1和输出1我采用

传染病模拟

您的任务是模拟传染病的传染过程。环境将以10x10网格的形式提供。网格的每个单元格都将包含字符"H"、"I"one_answers"-"中的一个,其中"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]

最新更新