二、stl ,模擬,貪心等 [Cloned] C
阿新 • • 發佈:2019-01-09
原題:
夏天來了~~好開心啊,呵呵,好多好多水果~~
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; }