2009浙大上机复试解题报告
2011-03-06 19:57
453 查看
更详细的解题报告请下载:http://download.csdn.net/source/3153210
包括2005-2011,有些题目有多种解法!
http://acm.hdu.edu.cn/showproblem.php?pid=3782
http://acm.hdu.edu.cn/showproblem.php?pid=3783
http://acm.hdu.edu.cn/showproblem.php?pid=3784
http://acm.hdu.edu.cn/showproblem.php?pid=3785
http://acm.hdu.edu.cn/showproblem.php?pid=3786
以上代码并不是最优,贴出来只为与广大研友交流!有需要提供个别题目具体思路的请留言!
包括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 =0; fun(n); } else { n=(3*n+1)/2; if(n<=1000)d =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; }
以上代码并不是最优,贴出来只为与广大研友交流!有需要提供个别题目具体思路的请留言!
相关文章推荐
- 2005浙大上机复试解题报告
- 2006浙大上机复试解题报告
- 2007浙大上机复试解题报告
- 2008浙大上机复试解题报告
- 2010浙大上机复试解题报告
- 北京邮电大学2010年网院方向复试上机题 解题报告
- 北京航空航天大学 2008年复试上机题 解题报告
- 浙江大学2011年复试上机题 解题报告
- 浙江大学2007年复试上机题 解题报告
- 清华大学2000年复试上机题 解题报告
- 北京航空航天大学 2009年复试上机题 解题报告
- 哈尔滨工业大学2009年复试上机题 解题报告
- 浙江大学2006年复试上机题 解题报告
- 清华大学2001年复试上机题 第一套 解题报告
- 哈尔滨工业大学2010年复试上机题 解题报告
- 浙江大学2005年复试上机题 解题报告
- 清华大学2001年复试上机题 第二套 解题报告
- 清华大学 2000年研究生复试上机题 解题报告
- 哈尔滨工业大学2011年复试上机题 解题报告
- 计算机复试上机题解题报告