您的位置:首页 > 其它

2006浙大上机复试解题报告

2011-03-06 19:49 471 查看
更详细的解题报告请下载: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%10!=B%10)
{
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;
}


以上代码并不是最优,贴出来只为与广大研友交流!有需要提供个别题目具体思路的请留言!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: