水果,一道對結構體排序的水題
阿新 • • 發佈:2017-05-20
呵呵 print mes problem net 空行 沒有 scanf http
題目鏈接:https://vjudge.net/contest/161356#problem/E
夏天來了~~好開心啊,呵呵,好多好多水果~~
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)
分析:題目就是考對結構體的排序
題目不難,直接上代碼
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct sg
{
char name[88];
char place[88];
int sum;
};
bool cmp(const struct sg& s1,const struct sg& s2)
{
if(strcmp(s1.place,s2.place)==0)
return strcmp(s1.name,s2.name)<0;
else return strcmp(s1.place,s2.place)<0;
}
int main()
{
sg s[102];
int n,m;
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
for(int i=0;i<m;i++)
{
scanf("%s%s%d",s[i].name,s[i].place,&s[i].sum);
}
sort(s,s+m,cmp);
int flag=1;
for(int i=0;i<m-1;i++)
{
if(strcmp(s[i].place,s[i+1].place)==0)
{
if(strcmp(s[i].name,s[i+1].name)==0)
{
s[i+1].sum+=s[i].sum;
}
else
{
if(flag==1)
{
flag++;
printf("%s\n",s[i].place);
}
printf(" |----%s(%d)\n",s[i].name,s[i].sum);
}
}
else
{
if(flag==1)
{
flag++;
printf("%s\n",s[i].place);
}
flag=1;
printf(" |----%s(%d)\n",s[i].name,s[i].sum);
}
}
if(flag==1)
{
flag++;
printf("%s\n",s[m-1].place);
}
flag=1;
printf(" |----%s(%d)\n",s[m-1].name,s[m-1].sum);
if(n!=0)
printf("\n");
}
return 0;
}
水果,一道對結構體排序的水題