Joe經營著一個不大的水果店.他認為生存之道就是經營最受顧客歡迎的水果.現在他想要一份水果銷售情況的明細表,這樣Joe就可以很容易掌握所有水果的銷售情況了.
Input
第一行正整數N(0<N<=10)表示有N組測試數據.
每組測試數據的第一行是一個整數M(0<M<=100),表示工有M次成功的交易.其後有M行數據,每行表示一次交易,由水果名稱(小寫字母組成,長度不超過80),水果產地(小寫字母組成,長度不超過80)和交易的水果數目(正整數,不超過100)組成.
Output
對於每一組測試數據,請你輸出一份排版格式正確(請分析樣本輸出)的水果銷售情況明細表.這份明細表包括所有水果的產地,名稱和銷售數目的信息.水果先按產地分類,產地按字母順序排列;同一產地的水果按照名稱排序,名稱按字母順序排序.
兩組測試數據之間有一個空行.最後一組測試數據之後沒有空行.
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)
題目已經很明白了,就不需要我多說了
一道簡單的結構體排序
[cpp]
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
struct Node
{
char name[100];
char space[100];
int num;
} f[110];
int cmp(Node x,Node y)
{
if(strcmp(x.space,y.space))
return strcmp(x.space,y.space)<0;
return strcmp(x.name,y.name)<0;
}
int main()
{
int t,n,i;
scanf("%d",&t);
while(t--)
{
scanf("%d%*c",&n);
for(i = 0; i<n; i++)
{
scanf("%s%s%d",f[i].name,f[i].space,&f[i].num);
}
sort(f,f+n,cmp);
char di[100],min[100];
int cnt = 0,flag = 1;
strcpy(di,f[0].space);
strcpy(min,f[0].name);
for(i = 0; i<n; i++)
{
if(strcmp(di,f[i].space))
{
strcpy(di,f[i].space);
strcpy(min,f[i].name);
flag = 1;
cnt = 0;
}
if(!strcmp(di,f[i].space))
{
if(flag)
{
printf("%s\n",di);
flag = 0;
}
if(!strcmp(min,f[i].name))
{
while(!strcmp(min,f[i].name) && !strcmp(di,f[i].space))//產地與水果名都必須相同
{
cnt+=f[i].num;
i++;
}
printf(" |----%s(%d)\n",min,cnt);
strcpy(min,f[i].name);
i--;
cnt = 0;
}
}
}
if(t)
printf("\n");
}
return 0;
}