8N
夏天來了~~好開心啊,呵呵,好多好多水果~~
Joe經(jīng)營(yíng)著一個(gè)不大的水果店.他認(rèn)為生存之道就是經(jīng)營(yíng)最受顧客歡迎的水果.現(xiàn)在他想要一份水果銷售情況的明細(xì)表,這樣Joe就可以很容易掌握所有水果的銷售情況了.
Input
第一行正整數(shù)N(0<N<=10)表示有N組測(cè)試數(shù)據(jù).
每組測(cè)試數(shù)據(jù)的第一行是一個(gè)整數(shù)M(0<M<=100),表示工有M次成功的交易.其后有M行數(shù)據(jù),每行表示一次交易,由水果名稱(小寫字母組成,長(zhǎng)度不超過80),水果產(chǎn)地(小寫字母組成,長(zhǎng)度不超過80)和交易的水果數(shù)目(正整數(shù),不超過100)組成.
Output
對(duì)于每一組測(cè)試數(shù)據(jù),請(qǐng)你輸出一份排版格式正確(請(qǐng)分析樣本輸出)的水果銷售情況明細(xì)表.這份明細(xì)表包括所有水果的產(chǎn)地,名稱和銷售數(shù)目的信息.水果先按產(chǎn)地分類,產(chǎn)地按字母順序排列;同一產(chǎn)地的水果按照名稱排序,名稱按字母順序排序.
兩組測(cè)試數(shù)據(jù)之間有一個(gè)空行.最后一組測(cè)試數(shù)據(jù)之后沒有空行.
Sample Input
1 5 apple shandong 3 pineapple guangdong 1 sugarcane guangdong 1 pineapple guangdong 3 pineapple guangdong 1
Sample Output
guangdong |----pineapple(5) |----sugarcane(1) shandong |----apple(3)
// 使用sort+bool進(jìn)行多條件排序
1 #include<stdio.h>
2 #include<string.h>
3 struct Fruit
4 { char name[81]; char ori[81]; int num; };
5 int main()
6 {
7 int n, m, i,j,k, gap, flag;
8 struct Fruit f[100], t;
9 char name[81], ori[81]; int sum;
10 scanf("%d", &n);
11 while(n--)
12 {
13 scanf("%d", &m);
14 for(i=0;i<m;i++)
15 scanf("%s %s %d", &f[i].name, &f[i].ori, &f[i].num);
16 // 按產(chǎn)地分類,產(chǎn)地按字母順序排列
17 for(gap=m/2; gap>0; gap/=2)
18 for(i=gap; i<m; i++)
19 for(j=i;j-gap>=0&&strcmp(f[j].ori,f[j-gap].ori)<0;j-=gap)
20 { t=f[j-gap]; f[j-gap]=f[j]; f[j]=t; }
21 // 同一產(chǎn)地的水果按照名稱排序,名稱按字母順序排序
22 strcpy(ori,f[0].ori); j=0; int num[100]={0};
23 for(i=1;i<m;i++)
24 {
25 if(strcmp(ori,f[i].ori)==0) num[j]++;
26 else
27 { strcpy(ori,f[i].ori); j++; }
28 } // j=產(chǎn)地?cái)?shù), num[j]=水果數(shù)
29 for(i=0,k=0;i<m;i+=num[k]+1,k++)
30 for(gap=(num[k]+1)/2; gap>0; gap/=2)
31 for(i=gap; i<num[k]+1; i++)
32 for(j=i;j-gap>=0&&strcmp(f[j].name,f[j-gap].name)<0;j-=gap)
33 { t=f[j-gap]; f[j-gap]=f[j]; f[j]=t; }
34 strcpy(ori,f[0].ori); strcpy(name,f[0].name); sum=f[0].num;
35 puts(ori);
36 for(i=1;i<m;i++)
37 {
38 if(strcmp(ori,f[i].ori)==0)
39 {
40 if(strcmp(name,f[i].name)==0)
41 sum+=f[i].num;
42 else
43 {
44 printf(" |----%s(%d)
", name, sum);
45 strcpy(name,f[i].name); sum=f[i].num;
46 }
47 }
48 else
49 {
50 printf(" |----%s(%d)
", name, sum);
51 strcpy(ori,f[i].ori); strcpy(name,f[i].name); sum=f[i].num;
52 puts(ori);
53 }
54 }
55 printf(" |----%s(%d)
", name, sum);
56 if(n) printf("
");
57 }
58 return 0;
59 }
WA
1 #include<stdio.h>
2 #include<string.h>
3 #include<algorithm>
4 using namespace std;
5
6 struct Fruit
7 { char name[81]; char ori[81]; int num; } f[100];
8 bool cmp(Fruit a, Fruit b)
9 {
10 // 先按產(chǎn)地分類,產(chǎn)地按字母順序排列
11 if(strcmp(a.ori,b.ori)!=0)
12 return strcmp(a.ori,b.ori)<0;
13 // 同一產(chǎn)地的水果按照名稱排序,名稱按字母順序排序
14 else if(strcmp(a.name,b.name)!=0)
15 return strcmp(a.name,b.name)<0;
16 }
17 int main()
18 {
19 int n,m, i,sum;
20 char ori[81], name[81];
21 scanf("%d", &n);
22 while(n--)
23 {
24 scanf("%d", &m);
25 for(i=0;i<m;i++)
26 scanf("%s %s %d", &f[i].name, &f[i].ori, &f[i].num);
27 sort(f,f+m,cmp);
28 strcpy(ori,f[0].ori); strcpy(name,f[0].name); sum=f[0].num;
29 puts(ori);
30 for(i=1;i<m;i++)
31 {
32 if(strcmp(ori,f[i].ori)==0)
33 {
34 if(strcmp(name,f[i].name)==0)
35 sum+=f[i].num;
36 else
37 {
38 printf(" |----%s(%d)
", name, sum);
39 strcpy(name,f[i].name); sum=f[i].num;
40 }
41 }
42 else
43 {
44 printf(" |----%s(%d)
", name, sum);
45 strcpy(ori,f[i].ori); strcpy(name,f[i].name); sum=f[i].num;
46 puts(ori);
47 }
48 }
49 printf(" |----%s(%d)
", name, sum);
50 if(n) printf("
");
51 }
52 return 0;
53 }
AC
// WA原因待查
總結(jié)
- 上一篇: 如何用手机完成文件扫描如何用手机完成文件
- 下一篇: 班主任的主要职责是什么意思(班主任的主要