流感传染(C程序设计进阶第2周)
2015-11-09 18:41
302 查看
问题描述
有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着。在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不变),空房间不会传染。请输出第m天得流感的人数。
输入
第一行一个数字n,n不超过100,表示有n*n的宿舍房间。
接下来的n行,每行n个字符,’.’表示第一天该房间住着健康的人,’#’表示该房间空着,’@’表示第一天该房间住着得流感的人。
接下来的一行是一个整数m,m不超过100.
输出
输出第m天,得流感的人数
样例输入
样例输出
提示
源码中方法一是别人写的,很好。
方法二是自己写的,比较笨,用坐标来记忆。而且当把其中一部分变为屏蔽的代码后,提交就会提示说错误,现不知道错误在哪。待查找。
源码
方法一:
方法二:
有一批易感人群住在网格状的宿舍区内,宿舍区为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++强大的背后
- win7 没有休眠按钮
- 典型用户
- mybatis的foreach写用法
- 不定义JQuery插件,不要说会JQuery
- ACM——输入输出外挂
- hdu3065 病毒侵袭持续中(AC自动机)
- listView滚动高度
- PET重建技术 MLEM迭代法(C++)(一) 原理及成像
- 在 ios 与 android 同时支持js功能,即web与app的交互功能的实现
- 进阶书籍
- CocoaPods的安装和使用 —— HERO博客
- Chrome 控制台不完全指南
- CF 500C New Year Book Reading
- mysql容灾及自动化切换
- hdu4381Grid【微复杂的背包】
- 笔记_Maya绑定基础_修改骨骼的方向
- C++类的静态成员详细讲解
- iOS 更改textField里placeholder的字体和颜色
- 使用celery之怎么让celery跑起来(转)