2009浙大上机复试解题报告

    技术2022-05-19  16

    更详细的解题报告请下载:http://download.csdn.net/source/3153210

    包括2005-2011,有些题目有多种解法!

    http://acm.hdu.edu.cn/showproblem.php?pid=3782

     #include<stdio.h> int ans; void fun(int n) { if(n==1)return ; else if(n%2==0) { n/=2; ans++; fun(n); } else { n=(3*n+1)/2; ans++; fun(n); } return ; } int main() { int n; while(scanf("%d",&n)!=EOF&&n!=0) { ans=0; fun(n); printf("%d/n",ans); } return 0; }

    http://acm.hdu.edu.cn/showproblem.php?pid=3783

     #include<stdio.h> #include<string.h> #include<stdlib.h> int main() { char str[200]; while(gets(str)) { if(strcmp(str,"E")==0)break; int z,o,j; z=o=j=0; int i; int len=strlen(str); for(i=0;i<len;i++) if(str[i]=='Z')z++; else if(str[i]=='O')o++; else if(str[i]=='J')j++; else break; while(!(z==0&&o==0&&j==0)) { if(z!=0) { printf("Z"); z--; } if(o!=0) { printf("O"); o--; } if(j!=0) { printf("J"); j--; } } printf("/n"); } return 0; }

    http://acm.hdu.edu.cn/showproblem.php?pid=3784

     #include<iostream> using namespace std; int num[1005]; int d[1005]; void fun(int n) { if(n==1)return ; else if(n%2==0) { n/=2; if(n<=1000)d[n]=0; fun(n); } else { n=(3*n+1)/2; if(n<=1000)d[n]=0; fun(n); } return ; } int main() { int n; while(scanf("%d",&n)!=EOF&&n!=0) { int i; memset(d,0,sizeof(d)); for(i=1;i<=n;i++) { scanf("%d",&num[i]); d[num[i]]=1; } for(i=1;i<=n;i++) { fun(num[i]); } int cnt=0; for(i=n;i>=1;i--) if(d[num[i]]==1)cnt++; int k=0; for(i=n;i>=1;i--) { if(d[num[i]]==1) { k++; if(k==cnt) printf("%d/n",num[i]); else printf("%d ",num[i]); } } } return 0; }

    http://acm.hdu.edu.cn/showproblem.php?pid=3785

     #include<stdio.h> #include<stdlib.h> int N,M; int P[100005]; int cmp(const void *a,const void *b) { return (*(int *)b)-(*(int *)a); } int main() { while(scanf("%d %d",&N,&M)!=EOF) { if(N==0&&M==0)break; int i; for(i=1;i<=N;i++) scanf("%d",&P[i]); if(N<M)M=N; qsort(P+1,N,sizeof(P[1]),cmp); for(i=1;i<M;i++) printf("%d ",P[i]); printf("%d/n",P[M]); } return 0; }

    http://acm.hdu.edu.cn/showproblem.php?pid=3786

     #include<iostream> using namespace std; char str[30][5]; char t[5]; int N,M; int k; int used[30]; int first; int ok; int ans; int fun(char s,char T) { if(ok==1)return ans; int i,j; for(i=1;i<=N;i++) { if(ok==1)return ans; if((first==0&&s==str[i][0])||(first==1&&used[i]==0&&str[i][0]==s)) { if(k==0)first=1; if(T==str[i][1]||T==str[i][2]) { ok=1; ans=k+1; return ans; } for(j=1;j<=2;j++) { k++; used[i]=1; fun(str[i][j],T); used[i]=0; k--; } } } return 0; } int main() { while(scanf("%d %d",&N,&M)!=EOF) { if(N==0&&M==0)break; int i; for(i=1;i<=N;i++) { scanf("%s",str[i]); } for(i=1;i<=M;i++) { scanf("%s",t); ok=first=k=0; memset(used,0,sizeof(used)); ans=fun(t[0],t[1]); if(ans==0) { ok=first=k=0; memset(used,0,sizeof(used)); ans=fun(t[1],t[0]); ans=-ans; } if(ans==0)printf("-/n"); else if(ans<0) { ans=-ans; while(ans>2) { printf("great-"); ans--; } if(ans==2)printf("grandparent/n"); if(ans==1)printf("parent/n"); } else { while(ans>2) { printf("great-"); ans--; } if(ans==2)printf("grandchild/n"); if(ans==1)printf("child/n"); } } } return 0; }

     

    以上代码并不是最优,贴出来只为与广大研友交流!有需要提供个别题目具体思路的请留言!


    最新回复(0)