插一句 :第一题 :直接拿笔算就可以的,没啥技术含量
第二题 :观察发现这其实就是一个fib数列(看其他代码 好高大上,还要用DFS 我来个简单的)
#include<bits/stdc++.h>
int main()
{
long long c,a,b;
a=2;
b=3;
for(int i=3;i<31;++i){
c=a+b;
a=b;
b=c;
}
printf("%lld\n",c);
}
第九题 我用的是DFS
#include<bits/stdc++.h>
#define MAX 1010
char mp[MAX][MAX];
int vis[MAX][MAX];
int n,cou;
int dir[4][2]={1,0,0,1,-1,0,0,-1};//右 下 左 上
bool in(int x,int y)
{
if(x>=n || x<0 || y>=n || y<0 )
return false;
return true;
}
void dfs(int x,int y)
{
vis[x][y]=1;
for(int i=0;i<4;++i)
{
int nx = x+ dir[i][0];
int ny = y+dir[i][1];
if(in(nx,ny) && !vis[nx][ny])
{
vis[nx][ny]=1;
if(mp[nx][ny]=='#'&&mp[nx+1][ny]=='#' && mp[nx-1][ny]=='#'&&mp[nx][ny-1]=='#'&&mp[nx][ny+1]=='#')
cou++;
dfs(nx,ny);
}
}
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;++i)
scanf("%s",mp[i]);
memset(vis,0,sizeof(vis));
cou=0;
dfs(0,0);//z注意这两条语句顺序不能错 要么cou输出一直是0
printf("%d",cou);
return 0;
}