【openjudge 计算概论(A)】[函数递归练习(2)]
1:括号匹配问题
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char s[110];
int len,d[110],t;
bool p[110];
int main()
{
while((scanf("%s",s+1))==1)
{
printf("%s\n",s+1);
memset(p,0,sizeof(p));
len=strlen(s+1); t=0;
for(int i=1;i<=len;++i)
if(s[i]=='(')
{
d[++t]=i; p[i]=1;
}
else
if(s[i]==')')
if(t) p[d[t--]]=0;
else p[i]=1;
for(int i=1;i<=len;++i)
if(p[i])
if(s[i]=='(') printf("$");
else printf("?");
else printf(" ");
printf("\n");
}
return 0;
}
2:输出二进制补码
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char s[50];
int num[40],tot;
long long n;
int main()
{
//freopen("int.txt","r",stdin);
//freopen("my.txt","w",stdout);
int i;
while(1)
{
scanf("%s",s);
if((s[0]<48||s[0]>57)&&s[0]!='-') break;
int len=strlen(s);
memset(num,0,sizeof(num)); tot=0;
if(s[0]!='-')
{
for(i=0;i<len;++i) n=n*10+s[i]-48;
while(n) num[++tot]=n%2,n/=2;
for(i=32;i>0;--i) printf("%d",num[i]);
printf("\n");
}
else
{
for(i=1;i<len;++i) n=n*10+s[i]-48;
while(n) num[++tot]=n%2,n/=2;
tot=1;
for(i=32;i>0;--i) num[i]^=1;
while(num[tot]) num[tot++]=0;
num[tot]=1;
for(i=32;i>0;--i) printf("%d",num[i]);
printf("\n");
}
}
return 0;
}
3:汉诺塔问题
#include<cstdio>
using namespace std;
char ch[5];
int n;
void dfs(int t,int a,int b,int c)
{
if(t==1)
{
printf("%c->1->%c\n",ch[a],ch[c]);
return;
}
dfs(t-1,a,c,b);
printf("%c->%d->%c\n",ch[a],t,ch[c]);
dfs(t-1,b,a,c);
}
int main()
{
scanf("%d %c %c %c",&n,&ch[1],&ch[2],&ch[3]);
dfs(n,1,3,2);
return 0;
}
4:流感传染
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char ch[110][110];
int d1[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int d[10010][2],h,t,n,T;
int main()
{
int i,j;
scanf("%d",&n);
for(i=1;i<=n;++i)
{
getchar();
for(j=1;j<=n;++j)
{
scanf("%c",&ch[i][j]);
if(ch[i][j]=='@')
{d[++t][0]=i; d[t][1]=j;}
}
}
scanf("%d",&T); T--;
while(T--)
{
int last=t;
if(h>t) break;
do
{
int x=d[++h][0],y=d[h][1];
for(j=0;j<4;++j)
{
int xx=x+d1[j][0],yy=y+d1[j][1];
if(xx>0&&xx<=n&&yy>0&&yy<=n&&ch[xx][yy]=='.')
{
ch[xx][yy]='@';
d[++t][0]=xx; d[t][1]=yy;
}
}
}while(h<last);
}
printf("%d\n",t);
return 0;
}
既然无能更改,又何必枉自寻烦忧