acm 排序培训 夏天来了
2、题目描述:
Description
Input
Output
Sample Input
Sample Output
4、题目分析及知识点[重点]:
多层排序,以前还没有遇见过。。。
5、AC源代码:
#include<stdio.h>
#include<string.h>
int main()
{
struct out{
char name[90];
char prod[90];
int num; }fru[120];
int T;
scanf("%d",&T);
while(T--)
{
int M,i,j=0,k,sign,num,temp3; char name[90],prod[90],temp1[90],temp2[90];
scanf("%d",&M);
for(i=0;i<M;i++){
scanf("%s%s%d",name,prod,&num);
sign=0;
for(k=0;k<j;k++)
if(strcmp(fru[k].name,name)==0&&strcmp(fru[k].prod,prod)==0){
fru[k].num+=num;
sign=1;
}
if(sign==0){
strcpy(fru[j].name,name);
strcpy(fru[j].prod,prod);
fru[j].num=num;
j++;
} }
k=j;
for(j=0;j<k-1;j++)
for(i=0;i<k-j-1;i++){
if(strcmp(fru[i].prod,fru[i+1].prod)>0){
strcpy(temp1,fru[i+1].prod);
strcpy(temp2,fru[i+1].name);
temp3=fru[i+1].num;
strcpy(fru[i+1].prod,fru[i].prod);
strcpy(fru[i+1].name,fru[i].name);
fru[i+1].num=fru[i].num;
strcpy(fru[i].prod,temp1);
strcpy(fru[i].name,temp2);
fru[i].num=temp3;
}
else if(strcmp(fru[i].prod,fru[i+1].prod)==0&&strcmp(fru[i].name,fru[i+1].name)>0){
strcpy(temp2,fru[i+1].name);
temp3=fru[i+1].num;
strcpy(fru[i+1].name,fru[i].name);
fru[i+1].num=fru[i].num;
strcpy(fru[i].name,temp2);
fru[i].num=temp3;
} } //实现字符串的交换。。。
for(i=0;i<k;i++){
if(i==0){
printf("%s\n",fru[i].prod);
printf(" |----%s(%d)\n",fru[i].name,fru[i].num);
}
else if(strcmp(fru[i].prod,fru[i-1].prod)==0)
printf(" |----%s(%d)\n",fru[i].name,fru[i].num);
else
{
printf("%s\n",fru[i].prod);
printf(" |----%s(%d)\n",fru[i].name,fru[i].num);
} }
if(T!=0)
printf("\n");
}
return 0;
}
6、做题心得:
主要是两方面:
A、题复杂,可以分解成若干简单的题来做
B、控制格式,让人头疼啊。。。。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。