流感传染(C程序设计进阶 第2周)
2017-02-23 22:36
232 查看
编程题#6:流感传染
注意: 总时间限制: 1000ms 内存限制: 65536kB描述
有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着。在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不变),空房间不会传染。请输出第m天得流感的人数。输入
第一行一个数字n,n不超过100,表示有n*n的宿舍房间。接下来的n行,每行n个字符,’.’表示第一天该房间住着健康的人,’#’表示该房间空着,’@’表示第一天该房间住着得流感的人。
接下来的一行是一个整数m,m不超过100.
输出
输出第m天,得流感的人数样例输入
12345675....#.#.@..#@..#.........4样例输出
16代码:
首先是我写的,结果是对的,逻辑交待清楚了,但应该是有哪里不对劲,系统不接受。
//编程题#6:流感传染 /* #include <iostream> using namespace std; int main() { //数据存入n*n矩阵 int n = 0; cin >> n; char room[100][100] = { '\0' }; for (int i = 0; i < n; i++) for (int j = 0; j < n;j++) { cin >> room[i][j]; } //循环m天,定义变化规则:得流感的人会使其邻居传染上流感,空房间不会传染 int m =0 ; cin >> m; while (m) { //对第1行到第n-2行 for (int i = 1; i < n-1; i++) for (int j = 1; j < n-1; j++) { if (room[i][j] == '@') { if (room[i - 1][j] != '#') room[i - 1][j] == '@'; if (room[i + 1][j] != '#') room[i - 1][j] == '@'; if (room[i][j - 1] != '#') room[i - 1][j] == '@'; if (room[i][j + 1] != '#') room[i - 1][j] == '@'; } } //对第0行和第n-1行 for (int j = 0; j < n; j++) { if (room[0][j] == '@') { if (room[1][j] != '#') room[1][j] == '@'; } if (room[n-1][j] == '@') { if (room[n - 2][j] != '#') room[n - 2][j] == '@'; } } //对第0列和第n-1列 for (int i = 0; i < n; i++) { if (room[i][0] == '@') { if (room[i][1] != '#')room[i][1] == '@'; } if (room[i][n-1] == '@') { if (room[i ][n - 2] != '#') room[i][n - 2] == '@'; } } m--; } //统计m天后得流感的人数 int count = 0; for (int i = 0; i < n - 1; i++) for (int j = 0; j < n - 1; j++) { if (room[i][j] = '@') { count++; } } cout << count << endl; return 0; }这是参考的答案:
#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 ada8 ; 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; }
相关文章推荐
- 流感传染(C程序设计进阶第2周)
- 四大湖(C程序设计进阶 第2周)
- JAVA进阶 面向对象程序设计——第2周 对象交互【对象和对象之间的联系】
- 发票统计(C程序设计进阶 第2周)
- 票统计(C程序设计进阶第2周)
- 细菌实验分组(C程序设计进阶 第2周)
- Tomorrow never knows?(C程序设计进阶第2周)
- 细菌实验分组(C程序设计进阶第2周)
- 程序设计进阶 编程题#6:流感传染
- 寻找下标(C程序设计进阶第2周)
- 四大湖(C程序设计进阶第2周)
- Java语言程序设计-进阶篇(七)多线程与并行程序设计【上】
- 第2周 C语言及程序设计初步例程-37 循环嵌套
- 简单的学生信息处理程序实现(C++程序设计第2周)
- 分配病房 (Coursera 程序设计与算法 专项课程2 C程序设计进阶 李戈;OpenJudge)
- [.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程
- C语言及程序设计进阶例程-14 开发一个电子词典
- C语言及程序设计进阶例程-26 回溯溯法问题求解
- [.net 面向对象程序设计进阶] (9) 序列化(Serialization) (一) 二进制流序列化
- [.net 面向对象程序设计进阶] (16) 多线程(Multithreading)(一) 利用多线程提高程序性能(上)