这是一项学校作业,我从早上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]