努力变小神


私信TA

用户名:dotcpp0645728

访问量:1102

签 名:

等  级
排  名 12554
经  验 966
参赛次数 0
文章发表 4
年  龄 0
在职情况 学生
学  校 南京信息工程大学
专  业

  自我简介:

TA的其他文章

解题思路:
用全局变量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 人评分

  评论区

  • «
  • »