解题思路:
用全局变量r[100][100],模拟房间;全局变量n代表天数。
第一天的感染人数为输入的“@”数目。第一天以外的感染人数为上一天的感染人数+新增感染人数。
即infect_r(n,::r)=infect_r(n-1,::r)+search_r(n,::r);
int sear_r(int day,char(*r)[100]函数,搜索第 day 天,被感染的房间。
注意事项:
sear_r函数中找到第day天应该被感染的房间后不能立即将‘.’修改为‘@’,原因是会导致后续搜索时将新感染的‘@’当作上一天的‘@’。
所以搜索后先将其改为‘*’,函数结束前将所有‘*’修改为‘@’。
参考代码:
#includeusing namespace std; char r[100][100]; int n; int search_r(int m,char(*r)[100]) { int counter=0; if(m==1) { for(int i=1;i<=n;++i) for(int j=1;j1) { // cout<1判断"<<endl; for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) if(::r[i][j]=='@') { //cout<<"搜索到@" <<endl; if(::r[i-1][j]=='.') { counter++; // cout<<"上面被感染"<<endl; ::r[i-1][j]='*'; //星星为潜伏期 } if(::r[i+1][j]=='.') { counter++; ::r[i+1][j]='*'; // cout<<"下面被感染"<<endl; } if(::r[i][j+1]=='.') { counter++; ::r[i][j+1]='*'; // cout<<"right面被感染"<<endl; } if(::r[i][j-1]=='.') { counter++; ::r[i][j-1]='*'; //cout<<"left面被感染"<<endl; } } for(int i=1;i<=n;++i) for(int j=1;j>n; for(int i=1;i<=n;++i) for(int j=1;j>r[i][j]; int m=0; cin>>m; cout<<infect_r(m,::r)<<endl; cout<<endl; return 0; }
0.0分
1 人评分
C二级辅导-计负均正 (C语言代码)浏览:643 |
破解简单密码 (C语言代码)浏览:1864 |
C语言训练-求矩阵的两对角线上的元素之和 (C语言代码)浏览:3472 |
高精度加法 (C++代码)(大数加法)浏览:1008 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:466 |
C语言训练-计算:t=1-1/(2*2)-1/(3*3)-...-1/(m*m) (C语言代码)浏览:799 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:624 |
众数问题 (C语言代码)浏览:911 |
WU-printf基础练习2 (C++代码)浏览:2061 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:645 |