【openjudge 计算概论(A)】[函数递归练习(2)]

来源:互联网 发布:中国历年国防支出数据 编辑:程序博客网 时间:2024/04/30 08:04

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;}


0 0
原创粉丝点击