原题链接:流感传染
解题思路:
用全局变量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语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复