HDU 1263(水果)

基础题,首先创建交易的结构体数组,将每行交易依次读入,然后按照产地和水果名称排序,最后循环判断输出即可,详细见注释。

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
const int MAXM = 105;

struct deal //交易
{
	string fruit; //水果名称
	string place; //产地
	int num; //数量
}d[MAXM];

//排序规则
bool cmp(deal d1, deal d2)
{
	if (d1.place != d2.place) //如果产地不同,按照产地从小到大排序
		return d1.place < d2.place;
	else //如果产地相同,按照水果名称从小到大排序
		return d1.fruit < d2.fruit;
}

int main()
{
	int N;
	cin >> N;
	while (N--)
	{
		int M;
		cin >> M;
		for (int i = 0; i < M; i++) //输入结构体数组
		{
			cin >> d[i].fruit >> d[i].place >> d[i].num;
		}

		sort(d, d + M, cmp); //排序

		string nowPlace = d[0].place; //当前产地
		string nowFruit = d[0].fruit; //当前水果名称
		int nowNum = 0; //当前数量
		cout << d[0].place << endl;
		for (int i = 0; i < M; i++)
		{
			if (d[i].place == nowPlace) //本次交易和上次交易产地相同
			{
				if (d[i].fruit == nowFruit) //本次交易和上次交易水果名称相同
				{
					nowNum += d[i].num;
				}
				else //本次交易和上次交易水果名称不同
				{
					cout << "   |----" << nowFruit << "(" << nowNum << ")" << endl;
					nowFruit = d[i].fruit; //新交易的水果名称
					nowNum = d[i].num; //新交易的数量
				}
			}
			else //本次交易和上次交易产地不同
			{
				cout << "   |----" << nowFruit << "(" << nowNum << ")" << endl;
				cout << d[i].place << endl;
				nowPlace = d[i].place; //新交易的产地
				nowFruit = d[i].fruit; //新交易的水果名称
				nowNum = d[i].num; //新交易的数量
			}
		}
		cout << "   |----" << nowFruit << "(" << nowNum << ")" << endl; //最后一个交易
		if (N > 0)
			cout << endl;
	}
	return 0;
}

继续加油。

发布了206 篇原创文章 · 获赞 1 · 访问量 9000

猜你喜欢

转载自blog.csdn.net/Intelligence1028/article/details/104785679