7-11 感染人数 C语言

文章描述了一个编程问题,涉及在一个n×n的方阵中模拟传染病的传播过程,从第一天的初始状态开始,计算经过m天后有多少人得流感。问题需要使用C语言实现并解决。
摘要由CSDN通过智能技术生成

设某住宿区域是一个n×n的方阵,方阵中的每个小方格为一个房间,房间里可能住一个人,也可能空着。第一天,某些房间中住着的人得了一种高传染性的流感,以后每一天,得流感的人会使其邻居(住在其上、下、左、右方向存在的房间里面的人)传染上流感,请问:第m天总共有多少人得流感?

输入格式:

第一行输入两个整数n,m(1<n≤20,1≤m≤100),含义如上述;接着输入n行,每行n个字符,表示住宿区域第一天的房间情况,其中,@表示当天该房间住着得流感的人,.表示该房间住着健康的人,#表示该房间是空的。

输出格式:

输出一个整数,表示第m天得了流感的人数。

输入样例1:

5 3
#....
.....
...##
.#.@.
@.#..

输出样例1:

10

输入样例2:

5 4
....#
.#.@.
.#@..
#....
.....

输出样例2:

设某住宿区域是一个n×n的方阵,方阵中的每个小方格为一个房间,房间里可能住一个人,也可能空着。第一天,某些房间中住着的人得了一种高传染性的流感,以后每一天,得流感的人会使其邻居(住在其上、下、左、右方向存在的房间里面的人)传染上流感,请问:第m天总共有多少人得流感?

输入格式:

第一行输入两个整数n,m(1<n≤20,1≤m≤100),含义如上述;接着输入n行,每行n个字符,表示住宿区域第一天的房间情况,其中,@表示当天该房间住着得流感的人,.表示该房间住着健康的人,#表示该房间是空的。

输出格式:

输出一个整数,表示第m天得了流感的人数。

输入样例1:

5 3
#....
.....
...##
.#.@.
@.#..

输出样例1:

10

输入样例2:

5 4
....#
.#.@.
.#@..
#....
.....

输出样例2:

16

代码:
 

#include<stdio.h>
int main() {
    int n, m;
    scanf("%d %d", &n, &m); // 输入住宿区域的大小和天数
    char c[n][n];
    getchar(); // 获取换行符
    // 读取每天住宿区域的情况
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            c[i][j] = getchar(); // 逐个字符读取
        }
        getchar(); // 获取换行符
    }
    // 对于每一天的操作
    for (int k = 1; k < m; k++) {
        // 遍历每个房间
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (c[i][j] == '@') { // 如果当前房间有人得了流感
                    // 标记该人的四个邻居为得了流感的人
                    if (i > 0 && c[i - 1][j] == '.') c[i - 1][j] = '*'; // 上
                    if (i < n - 1 && c[i + 1][j] == '.') c[i + 1][j] = '*'; // 下
                    if (j > 0 && c[i][j - 1] == '.') c[i][j - 1] = '*'; // 左
                    if (j < n - 1 && c[i][j + 1] == '.') c[i][j + 1] = '*'; // 右
                }
            }
        }
        // 将标记为得了流感的人更新为实际得了流感的人
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (c[i][j] == '*') c[i][j] = '@';
            }
        }
    }
    // 统计最后一天得了流感的人数
    int count = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (c[i][j] == '@') count++;
        }
    }
    printf("%d", count); // 输出最终得了流感的人数
}
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值