二、stl ,模拟,贪心等 [Cloned] C - stl 的 map

原题:

夏天来了~~好开心啊,呵呵,好多好多水果~~ 
Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了. 

题意:

给出几组数据,包括水果的名称、产地、销售数量,对这些数据进行统计,统计分类包括如下几层,首先是相同产地的各类水果,分别列出,然后相同产地的相同水果的销售数量要加和在一起。

题解:

看题头好像是要用map......然而我又用了结构体......

结构体包括水果产地,名称和数量,然后写一个compare函数进行字典序排序,然后将产地和名称都相同的水果的数量加起来,数组额外再多一个空间用来比较,每次比较到不同的产地就输出,然后再开始输出水果和数量。

代码:AC

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
typedef struct Fruit
{
	char name[150];
	char area[150];
	int num;
}Fruit;
bool compare(Fruit a,Fruit b)
{
	if(strcmp(a.area,b.area)!=0)
		return strcmp(a.area,b.area)<0;
	return strcmp(a.name,b.name)<0;
}
Fruit a[150];
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int n;
		cin>>n;
		int i;
		for(i=0;i<n;i++)
			cin>>a[i].name>>a[i].area>>a[i].num;
		sort(a,a+n,compare);
		strcpy(a[n].name,"11");
		strcpy(a[n].area,"11");
		a[n].num=-1;
		int sum=a[0].num;	
		char area1[150]="00";
		for(i=0;i<n;i++)
		{

			if(strcmp(area1,a[i].area)!=0)
			{
				cout<<a[i].area<<endl;
				strcpy(area1,a[i].area);
			}
			if(strcmp(a[i].area,a[i+1].area)==0&&strcmp(a[i].name,a[i+1].name)==0)
			{
				sum+=a[i+1].num;
			}
			else
			{
				cout<<"   |----"<<a[i].name<<"("<<sum<<")"<<endl;
				sum=a[i+1].num;
			}
		}
			if(t)
				cout<<endl;
	}
	return 0;
}	

猜你喜欢

转载自blog.csdn.net/npuyan/article/details/81369042
今日推荐