7-37 CPA招新Ⅱ

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]);
	}
}

样例测试:

在这里插入图片描述

发布了49 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/xiaosuC/article/details/104055157