版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Datura0822/article/details/52890436
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1263
结构体排序
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<iostream>
using namespace std;
struct node
{
string fruit;
string dic;
int num;
} pai[200];
int cmp(node p,node q)//先按产地字母序排,如果产地一样,按水果类别字母序排
{
if(p.dic==q.dic) return p.fruit<q.fruit;
else return p.dic<q.dic;
}
int main()
{
int ca;
cin >> ca;
while(ca--)
{
int n;
cin >> n;
for(int i=0; i<n; i++)
{
cin >> pai[i].fruit >> pai[i].dic >> pai[i].num;
}
sort(pai,pai+n,cmp);
cout << pai[0].dic << endl;//输出第一个产地
int sum=pai[0].num;//记录第一种水果的num
for(int i=1; i<n; i++)
{
if(pai[i].dic!=pai[i-1].dic)//碰到下一个产地,输出当前水果名及其sum,并更新sum,输出产地名
{
cout << " |----" << pai[i-1].fruit << "(" << sum << ")" << endl;
sum=pai[i].num;
cout << pai[i].dic << endl;
}
else
{
if(pai[i].fruit!=pai[i-1].fruit)//碰到下一种水果,输出当前水果名及其sum,并更新sum
{
cout << " |----" << pai[i-1].fruit << "(" << sum << ")" << endl;
sum=pai[i].num;
}
else sum+=pai[i].num;//同一种水果累加num
}
}
cout << " |----" << pai[n-1].fruit << "(" << sum << ")"<<endl;//输出最后一种水果名及其sum
if(ca!=0) cout << endl;//注意输出格式,两组测试数据之间有一个空行,最后一组测试数据之后没有空行
}
return 0;
}