7-37 CPA招新Ⅱ
题目描述:
新学期开始啦,我们CPA是2019年6月成立的,创建时有20位元老。现在需要招新啦,每年新学期社团服务中心会组织百团大战。我们CPA迎来第一次招新,我们很期待迎来新成员。
每天都有元老去招新,每招到一个萌新,招新人会在纸上写一个大写字母。CPA共有竞赛部、宣传部、办公部、组织部四个部门。我们规定A代表竞赛部(Competition department),B代表宣传部(Propaganda Department)、C代表办公部(Office)、D组织部(Organization Department)。社团招新后需要统计每一个部门有多少人?有一天会长突然来了,需要你给他一份部门人员名单,名单需要根据人数从大到小排序的,聪明的你会直接写一个程序给会长,让他直接使用程序排序。
输入格式:
输入一行字符串,字符串长度不大于10000。
输出格式:
如果人数相同,按照字典序从小到大排序,每输出一个部门换行。
输入与输出样例:
思路分析:
这道题一开始像通过记录A,B,C,D的数目,然后按照多的从上往下输出,但是无视了当他们相等的时候,按照字典搜索来输出,从字符串大小判断来输出,废话不多说,直接上代码。
代码:
#include<stdio.h>
#include<string.h>
int main()
{
char c1[10001];
char c2[10][100];
char c3[100];
strcpy(c2[0],"Competition department");
strcpy(c2[1],"Propaganda Department");
strcpy(c2[2],"Office");
strcpy(c2[3],"Organization Department");
int b[100]={0},min;
gets(c1);
int a=strlen(c1);
for(int c=0;c<a;c++)//记录A,B,C,D的数目多少
{
if(c1[c]=='A')
{
b[0]++;
}
if(c1[c]=='B')
b[1]++;
if(c1[c]=='C')
b[2]++;
if(c1[c]=='D')
b[3]++;
}
for(int c=0;c<3;c++)//通过选择法排序,来排列
{
for(int d=c+1;d<4;d++)
{
if(b[c]<b[d])//按小到大排序
{
min=b[c];
b[c]=b[d];
b[d]=min;
strcpy(c3,c2[c]);
strcpy(c2[c],c2[d]);
strcpy(c2[d],c3);
}
if(b[c]==b[d])//当数目相同的时候,按字符串长度来排序
{
if(strcmp(c2[c],c2[d])>0)
{
strcpy(c3,c2[c]);
strcpy(c2[c],c2[d]);
strcpy(c2[d],c3);
}
}
}
}
for(int c=0;c<4;c++)
{
if(c!=3)
printf("%s %d people!\n",c2[c],b[c]);
else
printf("%s %d people!",c2[c],b[c]);
}
}