新学期开始啦,我们CPA是2019年6月成立的,创建时有20位元老。现在需要招新啦,每年新学期社团服务中心会组织百团大战。我们CPA迎来第一次招新,我们很期待迎来新成员。
每天都有元老去招新,每招到一个萌新,招新人会在纸上写一个大写字母。CPA共有竞赛部、宣传部、办公部、组织部四个部门。我们规定A代表竞赛部(Competition department),B代表宣传部(Propaganda Department)、C代表办公部(Office)、D组织部(Organization Department)。社团招新后需要统计每一个部门有多少人?有一天会长突然来了,需要你给他一份部门人员名单,名单需要根据人数从大到小排序的,聪明的你会直接写一个程序给会长,让他直接使用程序排序。
输入一行字符串,字符串长度不大于10000。
如果人数相同,按照字典序从小到大排序,每输出一个部门换行。
AABBCCCDDAA
- Competition department 4 people!
- Office 3 people!
- Organization Department 2 people!
- Propaganda Department 2 people!
也许有人调皮不止ABCD四个字符,真实人数以ABCD为准。
//典型的结构体排序问题,这里的结构体值需要另外赋予,通过数组对各个字符的统计结果赋给a,而这里的字符需要手动赋予,最后排序就行。
- #include<bits/stdc++.h>
- using namespace std;
- struct xx{
- int a;
- string b;
- }s[10005];
- bool cmp(xx m,xx n){
- if(m.a==n.a)return m.b<n.b;//如果个数相同,按字符的字典排序,就是从小到大
- return m.a>n.a;//从大到小排序
- }
- int main(){
- string x;int i,y[4]={0};//数组初始化
- getline(cin,x);
- for(i=0;i<x.size();i++){
- if(x[i]=='A')y[0]++;
- if(x[i]=='B')y[1]++;
- if(x[i]=='C')y[2]++;
- if(x[i]=='D')y[3]++;
- }
- for(i=0;i<4;i++)
- s[i].a=y[i];
- s[0].b="Competition department ";
- s[1].b="Propaganda Department ";
- s[2].b="Office ";
- s[3].b="Organization Department ";
- sort(s,s+4,cmp);
- for(i=0;i<4;i++){
- cout<<s[i].b<<s[i].a<<" people!\n";
- }
- return 0;
- }