问题描述
有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着。在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不变),空房间不会传染。请输出第m天得流感的人数。
输入
第一行一个数字n,n不超过100,表示有n*n的宿舍房间。
接下来的n行,每行n个字符,’.’表示第一天该房间住着健康的人,’#’表示该房间空着,’@’表示第一天该房间住着得流感的人。
接下来的一行是一个整数m,m不超过100.
输出
输出第m天,得流感的人数
样例输入

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

样例输出

16

提示
源码中方法一是别人写的,很好。
方法二是自己写的,比较笨,用坐标来记忆。而且当把其中一部分变为屏蔽的代码后,提交就会提示说错误,现不知道错误在哪。待查找。
源码
方法一

 #include<iostream>#include<stdio.h>using namespace std;int main(){char a[101][101];int n, m, sum = 0;cin >> n;for(int i = 0;i < n; i++){for(int j = 0; j < n; j++){cin >> a[i][j];}}cin >> m;for(int d = 1; d <= m; d++){for(int i = 0; i < n; i++){for(int j = 0; j < n;j++){if(a[i][j] == '!')a[i][j] = '@'; // 将前一天标记的人感染}}for(int i = 0; i < n; i++){for(int j = 0; j < n;j++){// 将感染人周围的人标记if(a[i][j] == '@'){if(i + 1 <n && a[i + 1][j] == '.')a[i + 1][j]='!';if(j - 1 >= 0 && a[i][j - 1] == '.')a[i][j - 1] = '!';if(j + 1 < n && a[i][j + 1] == '.')a[i][j + 1]='!';if(i - 1 >= 0 && a[i - 1][j] == '.')a[i - 1][j] = '!';}}}}for(int i = 0; i < n; i++){for(int j = 0; j < n; j++){if(a[i][j] == '@')sum++;}}cout << sum << endl;return 0;
}

方法二:

#include <iostream>#include <vector>using namespace std;int main(){int n=0;cin >> n;vector<vector<char> > matrix(n, vector<char>(n)); for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){cin >> matrix[i][j];}}int m=0;cin >> m;vector<int> coordX;vector<int> coordY;for (int day = 1; day < m; day++){//找出所有流感坐标coordX.clear();coordY.clear();//找出所有流感坐标for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){if (matrix[i][j] == '@'){coordX.push_back(i);coordY.push_back(j);}               }}for (unsigned int k = 0; k < coordX.size(); k++){int x=0, y=0;x = coordX[k]-1;y = coordY[k];  if (x >= 0 && matrix[x][y] == '.'){matrix[x][y] = '@';}   x = coordX[k];y = coordY[k] - 1;if (y >= 0 && matrix[x][y] == '.'){matrix[x][y] = '@';}   x = coordX[k];y = coordY[k] + 1;if (y < n && matrix[x][y] == '.'){matrix[x][y] = '@';}   x = coordX[k]+1;y = coordY[k];  if (x < n && matrix[x][y] == '.'){matrix[x][y] = '@';}   }}//      vector<int> coordX;
//      vector<int> coordY;
//      for (int day = 1; day < m; day++)
//      {//          //找出所有流感坐标
//          coordX.clear();
//          coordY.clear();
//          for (int i = 0; i < n; i++)
//          {//              for (int j = 0; j < n; j++)
//              {//                  if (matrix[i][j] == '@')
//                  {//                      coordX.push_back(i);
//                      coordY.push_back(j);
//                  }
//              }
//          }
//          //感染周围环境
//          for (int k = 0; k < coordX.size(); k++)
//          {//              int x=0, y=0;
//              x = coordX[k]-1 < 0 ? 0 : coordX[k]-1;
//              y = coordY[k];
//              if (matrix[x][y] == '.')
//              {//                  matrix[x][y] = '@';
//              }
//
//              x = coordX[k];
//              y = coordY[k]-1 < 0 ? 0 : coordY[k] - 1;
//              if (matrix[x][y] == '.')
//              {//                  matrix[x][y] = '@';
//              }
//
//              x = coordX[k];
//              y = coordY[k]+1 > 4 ? 4 : coordY[k] + 1;
//              if (matrix[x][y] == '.')
//              {//                  matrix[x][y] = '@';
//              }
//
//              x = coordX[k]+1 > 4 ? 4 : coordX[k]+1;
//              y = coordY[k];
//              if (matrix[x][y] == '.')
//              {//                  matrix[x][y] = '@';
//              }
//          }
//      }//输出int num = 0;for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){if (matrix[i][j] == '@'){num++;}               }}cout << num << endl;return 0;}

流感传染(C程序设计进阶第2周)相关推荐

  1. 递归习题—排队游戏(C程序设计进阶 第3周)

    编程题#3:排队游戏 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 在幼儿 ...

  2. Tomorrow never knows?(C程序设计进阶第2周)

    问题描述 甲壳虫的<A day in the life>和<Tomorrow never knows>脍炙人口,如果告诉你a day in the life,真的会是tomor ...

  3. Tomorrow never knows? (C程序设计进阶 第2周)

    编程题#4:Tomorrow never knows? 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限 ...

  4. 文字排版(C程序设计进阶第5周)

    问题描述 给一段英文短文,单词之间以空格分隔(每个单词包括其前后紧邻的标点符号).请将短文重新排版,要求如下: 每行不超过80个字符:每个单词居于同一行上:在同一行的单词之间以一个空格分隔:行首和行尾 ...

  5. 201521123122 《java程序设计》第十三周学习总结

    ## 201521123122 <java程序设计>第十三周实验总结 ## 1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1 ...

  6. java语言程序设计视频_[VIP视频]【A0152】Java语言程序设计进阶高级进阶视频教程 网易云课堂 百度网盘 云盘...

    Java语言程序设计进阶-云课堂' S0 c5 z4 C* S: n: K/ D ├─第1周 类和对象 9 i5 N/ j$ I9 d9 z9 t# [# U: D│      1.1 用类制造对象. ...

  7. 清华大学《Java语言程序设计进阶》公开课总结

    点击查看:原文 本文是清华大学许斌老师的公开课:Java语言程序设计进阶 的课堂笔记,快速复习一下,时间有限,因此大量直接截图.许斌老师声明:没有配套讲义,建议参考书籍:周志明<深入理解java ...

  8. 进阶 c程序设计语言,C程序设计进阶

    你将学到什么 Computer Display Standard C Programming C++ 课程概况 如果说学习过<计算导论与C语言基础>,你已经迈入了C语言的殿堂,那么< ...

  9. 《Java程序设计》第十一周学习总结

    20175334 <Java程序设计>第十一周学习总结 教材学习内容总结 第十三章 URL类 一个URL对象通常包含最基本的三部分信息:协议.地址.资源. URL对象调用 InputStr ...

最新文章

  1. MongoDB主动撤回SSPL的开源许可申请
  2. Coursera在线学习---第十节.大规模机器学习(Large Scale Machine Learning)
  3. 客户端 获取服务器性能,客户端数量 服务器性能
  4. 通过虚方法实现方法重写-多态
  5. 海信集团:通过数据来驱动企业的管理,让数据真正成为生产力
  6. 7.2图的存储结构(邻接矩阵)
  7. Hive在linux上的部署
  8. geforce experience_Nvidia? Geforce? Experience?是什么?如何使用呢?
  9. mysql中 routine
  10. vi设计清单_最终产品设计组合清单
  11. 扫描枪取消回车二维码_如何使条码扫描枪录入完不自动回车呢-百度经验
  12. 天正菜单栏不见了怎么显示出来_天正建筑菜单栏不见了怎么调出来
  13. vue 使用html2canvas实现图片合成,将两张图片合成一张,并下载海报
  14. SpringBoot框架的基本结构
  15. 微软的软件测试工程师——《微软的软件测试之道》
  16. 彻底删除Win7任务栏通知区域已卸载程序图标
  17. Windows pytorch编译安装SoftPool
  18. Xposed系列--技巧篇
  19. bogomips 骁龙820_解读|手机CPU综合性能排行:骁龙820吊打一切
  20. 生活中有趣好玩的产品设计

热门文章

  1. python GNE 爬虫通用提取文章信息模块
  2. 使用chrome调试手机,平板,pc上各种浏览器上的页面
  3. 【封神台】无WAF的SQL注入
  4. 我的Office PIA之路(一) Microsoft.Office.Interop.Excel.dll 的获取
  5. Java 结构化数据处理开源库 SPL使用手册
  6. PS如何使用制作图片投影效果
  7. 使用Keras和OpenCV实时预测年龄、性别和情绪 (详细步骤+源码)
  8. JavaScript 简单的弹幕功能的实现
  9. 基于android的餐厅智能点餐
  10. 网络安全相关术语基本概述