2006浙大上机复试解题报告

    技术2022-05-19  20

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

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

    http://acm.hdu.edu.cn/showproblem.php?pid=1229#include<stdio.h> int main() { int A,B,K; while(scanf("%d %d %d",&A,&B,&K)!=EOF) { if(A==0&&B==0)break; if(K>4)K=4; int TA=A; int TB=B; int i; int flag=1; for(i=0;i<K;i++) { if(A!=B) { flag=0; break; } A/=10;B/=10; } if(flag==1) printf("-1/n"); else printf("%d/n",TA+TB); } return 0; }

    http://acm.hdu.edu.cn/showproblem.php?pid=1230#include<stdio.h> #include<string.h> int P[30]; void prime() { int num; int k=0; for(num=2;;num++) { int temp=num/2; int i; for(i=2;i<=temp;i++) { if(num%i==0)break; } if(i==temp+1)P[++k]=num; if(k==24)break; } } int main() { char str1[1000],str2[1000]; int sum[30]; prime(); while(scanf("%s %s",str1,str2)!=EOF) { if(strcmp(str1,"0")==0)break; int i; int j; int len; int len1=1,len2=1; int a[30]={0}; int b[30]={0}; for(i=0;i<30;i++) a[i]=b[i]=0; for(i=0;str1[i]!='/0';i++) { if(str1[i]==',')len1++; } for(i=0,j=len1;str1[i]!='/0';i++) { if(str1[i]!=',') { a[j]=a[j]*10+str1[i]-48; } else j--; } len=len1; for(i=0;str2[i]!='/0';i++) { if(str2[i]==',')len2++; } for(i=0,j=len2;str2[i]!='/0';i++) { if(str2[i]!=',') { b[j]=b[j]*10+str2[i]-48; } else j--; } if(len2>len)len=len2; int temp=0; for(i=1;i<=len+1;i++) { if(temp+a[i]+b[i]>=P[i]) { sum[i]=temp+a[i]+b[i]-P[i]; temp=1; } else { sum[i]=temp+a[i]+b[i]; temp=0; } } if(sum[len+1]!=0)len+=1; for(i=len;i>1;i--) printf("%d,",sum[i]); printf("%d/n",sum[1]); } return 0; }

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

    #include<stdio.h> #include<stdlib.h> struct MyEdge { int a,b; int dis; }edge[10000]; int p[102]; int cmp(const void *a,const void *b) { return (*(MyEdge *)a).dis-(*(MyEdge *)b).dis; } void set_init() { int i; for(i=0;i<102;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 main() { int n; while(scanf("%d",&n)!=EOF&&n!=0) { int i; int s,t,d; int used[105]={0}; for(i=1;i<=n*(n-1)/2;i++) { scanf("%d %d %d",&s,&t,&d); edge[i].a=s; edge[i].b=t; edge[i].dis=d; } qsort(edge+1,n*(n-1)/2,sizeof(edge[1]),cmp); int T=n-1; int sum=0; set_init(); for(i=1;i<=n*(n-1)/2;i++) { if(find_set(edge[i].a)!=find_set(edge[i].b)) { sum+=edge[i].dis; SetUnion(edge[i].a,edge[i].b); T--; if(T==0)break; } } printf("%d/n",sum); } return 0; }

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

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

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

    #include<stdio.h> char op[200]; double num[200]; int main() { double temp; char tempc; while(scanf("%lf",&temp)!=EOF) { double sum=0; int num_i=0; int op_i=0; num[++num_i]=temp; scanf("%c",&tempc); if(tempc=='/n')break; while(1) { scanf("%c",&tempc); op[++op_i]=tempc; scanf("%lf",&temp); num[++num_i]=temp; if(op[op_i]=='*') { sum=num[num_i-1]*num[num_i]; num[--num_i]=sum; op_i--; } if(op[op_i]=='/') { sum=num[num_i-1]/num[num_i]; num[--num_i]=sum; op_i--; } //printf("%.2lf ",temp); scanf("%c",&tempc); if(tempc=='/n') break; } int k=2; sum=num[1]; int j=1; while(j!=op_i+1) { if(op[j]=='+') sum+=num[k]; else if(op[j]=='-') sum-=num[k]; k++; j++; } printf("%.2lf/n",sum); } return 0; }

     

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


    最新回复(0)