2005浙大上机复试解题报告

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

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

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

#include<stdio.h> #include<string.h> #include<stdlib.h> char Num[10][10]={"zero","one","two","three","four","five","six","seven","eight","nine" }; int fun(char temp[]) { int i; for(i=0;i<10;i++) { if(strcmp(temp,Num[i])==0) { return i; } } return 0; } int main() { char temp[10]; int left,right,sum; int flag=0; int Tflag=0; while(scanf("%s",temp)!=EOF) { flag=0; left=right=sum=0; left=fun(temp); while(scanf("%s",temp)) { if(strcmp(temp,"=")==0) { if(left+right==0)Tflag=1; else { printf("%d/n",left+right); left=right=sum=0; } break; } if(strcmp(temp,"+")==0) { flag=1; continue; } if(flag==0) { int T; T=fun(temp); left=left*10+T; } else { int T; T=fun(temp); right=right*10+T; } } if(Tflag==1)break; } return 0; }

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

#include<stdio.h> int main() { int K; int a[10005]; int dp[10005][3]; while(scanf("%d",&K)!=EOF&&K!=0) { int i; int flag=1; for(i=1;i<=K;i++) { scanf("%d",&a[i]); if(a[i]>0)flag=3; if(a[i]==0&&flag!=3) { flag=2; } } if(flag==2) { printf("0 0 0/n"); continue; } else if(flag==1) { printf("0 %d %d/n",a[1],a[K]); continue; } else { dp[1][1]=a[1]; dp[1][2]=1; for(i=2;i<=K;i++) { if(a[i]>=0&&dp[i-1][1]>=0) { dp[i][1]=dp[i-1][1]+a[i]; dp[i][2]=dp[i-1][2]; } if(a[i]<0&&dp[i-1][1]>=0) { dp[i][1]=a[i]+dp[i-1][1]; dp[i][2]=dp[i-1][2]; } if(dp[i-1][1]<0) { dp[i][1]=a[i]; dp[i][2]=i; } } int max=0; int T; for(i=1;i<=K;i++) if(max<dp[i][1]) { max=dp[i][1]; T=i; } printf("%d %d %d/n",max,a[dp[T][2]],a[T]); } } return 0; }

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

#include<stdio.h> #include<stdlib.h> int p[1002]; void set_init() { int i; for(i=0;i<1002;i++) p[i]=i; } int find_set(int a) { if (p[a]==a) return a; else return p[a]=find_set(p[a]); } void SetUnion(int x,int y) { int a=find_set(x); int b=find_set(y); if(a==b)return ; p[b]=a; } int cmp(const void *a,const void *b) { return *(int *)a-*(int *)b; } int main() { int N,K; while(scanf("%d",&N)!=EOF&&N!=0) { scanf("%d",&K); int i; int s,t; set_init(); for(i=1;i<=K;i++) { scanf("%d %d",&s,&t); if(t!=s&&find_set(s)!=find_set(t)) { SetUnion(s,t); } } int ans[1002]; for(i=1;i<=N;i++) ans[i]=find_set(i); qsort(ans+1,N,sizeof(ans[1]),cmp); int num=0; for(i=2;i<=N;i++) if(ans[i]!=ans[i-1])num++; printf("%d/n",num); } return 0; }

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

#include<stdio.h> #include<stdlib.h> #include<string.h> struct Ans { int time; char name[20]; }S_ans,E_ans; int fun(char Temp[]) { int ans=0; int temp=0; int i=0; while(Temp[i]!='/0') { if(Temp[i]==':') { ans+=temp; temp=0; ans*=60; } else { temp=temp*10+(Temp[i]-48); } i++; if(Temp[i]=='/0') { ans+=temp; } } return ans; } int main() { int N; int K; int j; scanf("%d",&N); for(j=1;j<=N;j++) { scanf("%d",&K); int i; char Tname[20]; char Tstart[20]; char Tend[20]; int flag=0; for(i=1;i<=K;i++) { scanf("%s%s%s",Tname,Tstart,Tend); if(flag==0) { S_ans.time=fun(Tstart); //printf("%d/n",S_ans.time); strcpy(S_ans.name,Tname); E_ans.time=fun(Tend); //printf("%d/n",E_ans.time); strcpy(E_ans.name,Tname); flag=1; } else { int s=fun(Tstart); int t=fun(Tend); //printf("%d %d/n",s,t); if(s<S_ans.time) { S_ans.time=s; strcpy(S_ans.name,Tname); } if(t>E_ans.time) { E_ans.time=t; strcpy(E_ans.name,Tname); } } } printf("%s %s/n",S_ans.name,E_ans.name); } return 0; }

http://acm.hdu.edu.cn/showproblem.php?pid=1236#include<stdio.h> #include<stdlib.h> #include<string.h> struct S { char name[30]; int g; }s[1005]; int num[20]; int cmp(const void * a,const void * b) { struct S *c=(S *)a; struct S *d=(S *)b; if(c->g!=d->g) return d->g-c->g; else return strcmp(c->name,d->name); } int main() { int N; int T,F; while(scanf("%d",&N)!=EOF&&N!=0) { scanf("%d %d",&T,&F); int i; for(i=1;i<=T;i++) scanf("%d",&num[i]); char Tname[30]; for(i=1;i<=N;i++) { scanf("%s",s[i].name); int K; scanf("%d",&K); int j; int temp; int sum=0; for(j=1;j<=K;j++) { scanf("%d",&temp); sum+=num[temp]; } s[i].g=sum; } qsort(s+1,N,sizeof(s[1]),cmp); int ans=0; for(i=1;i<=N;i++) { if(s[i].g>=F)ans++; else break; } printf("%d/n",ans); for(i=1;i<=ans;i++) { printf("%s %d/n",s[i].name,s[i].g); } } return 0; }

 

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

 

你可能感兴趣的:(c,struct,fun)