传染病模拟
在这项带回家的考试中,您的任务是模拟传染病的传染过程。该环境将以10x10网格的形式提供。网格的每个单元格都将包含字符“ H”,“ I”和“-”之一,其中“ H”代表健康,“ I”代表感染者。 “-”表示此单元格未被任何人占用;换句话说,它是空的。
[在模拟的每一步(针对每一代),感染者都会感染他/她附近所有健康的人。它们只能通过向上,向下,向右和向左的方向进行感染。对角线感染是不可能的。
模拟步骤的数量将作为输入提供,您将相应地运行模拟。最后一个模拟步骤完成后,您将打印网格的状态。
[虽然您正在计算下一代,但是您将仅考虑上一代的状态。
输入格式:
在网格的每一行之后,将给出一个新行'\ n'字符。读取网格后,您应该从输入中读取模拟数量。
示例输入和输出:
输入1:
--IHH---I-
-H--------
----------
----H-----
----IH----
----H-----
----H-----
-H--------
---------I
-HI--H---I
1
OUTPUT 1EXPECTED:
--IIH---I-
-H--------
----------
----I-----
----II----
----I-----
----H-----
-H--------
---------I
-II--H---I
OUTPUT I GET 1
--III---I-
-I--------
----------
----H-----
----IH----
----H-----
----H-----
-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
OUTPUT 2 I GET
--III---I-
-I--------
----------
----H-----
----IH----
----H-----
----H-----
-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;
}
}
scanf("%d",&n);
c = 0;i=0;j=0;
for(c=0,i = 0;i < 10 ; i++, c++)
{
for(j = 0 ;j < 10 ; j++ )
{
if(c>n)
{
break;
}
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';
}
}
}
for(i = 0; i < 10; i++)
{
for(j = 0; j < 10 ; j++)
{
printf("%c",grid[i][j]);
}
}
return 0;
}
您应该像这样使用scanf
scanf(" %c",&x); //with a leading blank to skip optional white space.
否则,scanf捕获换行符作为输入。您也可以检查此问题以更好地理解。scanf() leaves the new line char in the buffer