首页 > 其他分享 >感染人数

感染人数

时间:2023-11-27 21:22:35浏览次数:26  
标签:count 判断 int 房间 感染 column 人数 row

7-1 感染人数

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

输入格式:

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

输出格式:

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

输入样例1:

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

输出样例1:

10

输入样例2:

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

输出样例2:

16

解题思路:

  1.先读入方阵大小n和感染天数m,再根据方阵大小读入具体房间数据(注意:char[][]矩阵读取时会将回车,即'\n'读取,记得在一行循环结束时使用getchar()过滤回车)

  2.根据感染天数m开始循环(注意:输入时的方阵即为第一天的情况,我们在判断的时候只需要判断m-1天即可)

  3.我为了方便寻找感染病人,即'@'符号所在的位置,在读取数据的时候使用row[]和column[]数组用来记录'@'符号的具体坐标,之后就不需要循环判断,只需要遍历row[]和column[]数组即可。

  4.在遍历数组根据'@'的坐标判断时,一开始想的方法比较复杂,后来进行了优化,以下是优化版本:(其实看着房间类型很多,其实只需要判断对应上下左右的房间有没有健康的人'.'而已)

    (1)使用r和c记录'@'的行列坐标值

    (2)判断r是否>0(此处是为了过滤r=0,即'@'上层没有数据的情况),如果满足,再判断r上层是否有健康的人,有则进行感染,将'.'替换为'@'

    (3)判断r是否<n-1(此处是为了过滤r=n-1,即'@'下层没有数据的情况),如果满足,再判断r下层是否有健康的人,有则进行感染,将'.'替换为'@'(一开始的判断条件我错写为<n,导致数组越界,感染的人到r=0处了)

    (4)判断c是否>0(此处是为了过滤c=0,即'@'左侧没有数据的情况),如果满足,再判断c左侧是否有健康的人,有则进行感染,将'.'替换为'@'

    (5)判断c是否<n-1(此处是为了过滤c=n-1,即'@'右侧没有数据的情况),如果满足,再判断c右侧是否有健康的人,有则进行感染,将'.'替换为'@'

  5.依照以上思路实现代码,不要忘记使用count记录感染人数,count同时也是row[]和column[]循环遍历的依据,最后将count输出,则解题完毕

  6.总的来说,这题比较考验细心,比如说我之前在做赋值时将c-1写成c+1,导致一直答案错误,检查时才发现出了这样的问题。

#include<stdio.h>
int main() {
    int n,m;
    scanf("%d %d\n",&n,&m);
    int row[n*n];
    int column[n*n];
    char room[n][n];
    int count = 0;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            scanf("%c",&room[i][j]);
            if(room[i][j]=='@'){
                row[count] = i;
                column[count] = j;
                count++;
            }
        }
        getchar();
    }
    for(int i=1;i<m;i++){
        int number = count;
        for(int j=0;j<number;j++){
            int r = row[j];
            int c = column[j];
            if(r>0&&'.'==room[r-1][c]){
                room[r-1][c] = '@';
                row[count] = r-1;
                column[count] = c;
                count++;
            }
            if(r<n-1&&'.'==room[r+1][c]){
                room[r+1][c] = '@';
                row[count] = r+1;
                column[count] = c;
                count++;
            }
            if(c>0&&'.'==room[r][c-1]){
                room[r][c-1] = '@';
                row[count] = r;
                column[count] = c-1;
                count++;
            }
            if(c<n-1&&'.'==room[r][c+1]){
                room[r][c+1] = '@';
                row[count] = r;
                column[count] = c+1;
                count++;
            }
        }
    }
    printf("%d",count);
}

 

标签:count,判断,int,房间,感染,column,人数,row
From: https://www.cnblogs.com/lavendery/p/17860461.html

相关文章

  • ContentProvider 之 写入联系人数据
    在项目ContentProviderSample代码基础上实现写入共享联系人数据的示例,具体步骤如下:在AndroidManifest.xml中,添加写入联系人数据的权限编辑布局文件activity_contacts.xml,界面上布局三个文本输入框用于填写联系人名称、电话号码和邮箱账号和确认写入按钮。编写代码ContactsActivi......
  • springboot在线人数统计
    在线人数统计笔者做了一个网站,需要统计在线人数。在线有两种:一、如果是后台系统如果登录算在线,退出的时候或者cookie、token失效的时候就算下线二、如果是网站前台,访问的时候就算在线今天我们来讲一下第2种情况,网站前台如何统计同时在线人数1、首先创建一个在线人数管理类......
  • 蓝桥杯2019 估计人数
    蓝桥杯2019估计人数题目描述给定一个\(N\timesM\)的方格矩阵,矩阵中每个方格标记0或者1代表这个方格是不是有人踩过。已知一个人可能从任意方格开始,之后每一步只能向右或者向下走一格。走了若干步之后,这个人可以离开矩阵。这个人经过的方格都会被标记为1,包括开始和结......
  • R语言实现抖音达人数据采集
        抖音是近些年最火爆的短视频平台,今天我们试着用R语言编写一个采集大人数据的程序,必须保证安装rvest和proxyr,一起来看看吧。```rinstall.packages("rvest")install.packages("proxyr")```然后,你需要在R中声明代理信息。这可以通过`proxyr::proxy`函数完成。```rlibra......
  • 21.6 Python 构建ARP中间人数据包
    ARP中间人攻击(ARPspoofing)是一种利用本地网络的ARP协议漏洞进行欺骗的攻击方式,攻击者会向目标主机发送虚假ARP响应包,使得目标主机的ARP缓存中的IP地址和MAC地址映射关系被篡改,从而使得目标主机将网络流量发送到攻击者指定的虚假MAC地址。攻击者可以在不被发现的情况下窃取目标主......
  • 马尔可夫转换模型研究交通伤亡人数事故时间序列预测|附代码数据
    最近我们被客户要求撰写关于马尔可夫转换模型的研究报告,包括一些图形和统计输出。本文描述了R语言中马尔克夫转换模型的分析过程首先,对模拟数据集进行详细建模。接下来,将马尔可夫转换模型拟合到具有离散响应变量的真实数据集。用于验证对这些数据集建模的不同方法。模拟实例示例数......
  • 案例9-根据总人数和香蕉总数分香蕉
    题目详细说明:班上总共有17名学生,老师总共拿了65根香蕉分给班上的学生学生,问每人可以分到多少根香蕉?将多余的香蕉退还给老师,需要退还多少根?请使用C语言来计算并输出结果。示例代码如下:#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>voidmain(){ inttotal=65......
  • 【Java】用户在线人数统计的简单实现
    一、需求效果:就是进入首页时能查看在线人数,没有特定要求,那我就不刷这个接口了就进入首页加载一次 二、实现思路:思路参考博客:https://blog.csdn.net/GitLuckyd/article/details/124488063如果是以前那种JSP的单体项目,可以用Servlet的监听器API来做但是不管是Servlet还......
  • Centos感染挖矿病毒kswapd0
    top查看发现kswapd0占用异常高有一个陌生的用户comp先删除authorized_keys中陌生的key查看root的计划任务(发现没异样)crontab-l查看该用户的计划任务sudo-ucompbash-c'crontab-l'发现删除,顺便删除crontab里面使用的文件和文件夹删除comp用户的进程查看......
  • R语言非线性回归和广义线性模型:泊松回归、伽马回归、逻辑回归、Beta回归分析机动车事
    全文链接:https://tecdat.cn/?p=33781原文出处:拓端数据部落公众号我们使用广义线性模型(GeneralizedLinearModels,简称GLM)来研究客户的非正态数据,并探索非线性关系。GLM是一种灵活的统计模型,适用于各种数据类型和分布,包括二项分布、泊松分布和负二项分布等非正态分布。通过GLM,我......