我的嵌套循环反复出现-传染病模拟

问题描述 投票:-1回答:1

这是我从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;
}
c multidimensional-array nested-loops
1个回答
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]

© www.soinside.com 2019 - 2024. All rights reserved.