1. 程式人生 > >二、stl ,模擬,貪心等 [Cloned] C

二、stl ,模擬,貪心等 [Cloned] C

原題:

夏天來了~~好開心啊,呵呵,好多好多水果~~ 
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;
}