蓝桥杯 省赛c语言(第七题)
x星球有26只球队,分别用a~z的26个字母代表。他们总是不停地比赛。
在某一赛段,哪个球队获胜了,就记录下代表它的字母,这样就形成一个长长的串。
国王总是询问:获胜次数最多的和获胜次数最少的有多大差距?(当热他不关心那些一次也没输入,一个串,表示球队获胜情况(保证串的长度<1000))
要求输入一个数字,表示出现次数最多的字母比出现次数最少的字母多了多少次。
比如:
输入:
abaabcaa
则程序应该输出:
4
解释:a出现5次,最多;c出现1次,最少。5-1=4;
再比如:
输入:
bbccccddaaaacccc
程序应该输出:
6
解题
#include"stdio.h"
#include"string.h"
int main()
{
char a[1000];//用于输入字符串
scanf("%s",a);
int num_a=strlen(a);//计算字符串大小
int cont[1000],num=0,num_cont=0; //用于存放每个字符出现的个数
int i,j;
char copy[1000];int num_c=1; //用于去重
copy[num_c]=a[0];
for(i=1;i<num_a;i++)
{
for(j=1;j<num_c+1;j++)
{
if(a[i]!=copy[j]&&j==num_c)
{
copy[++num_c]=a[i];
}else if(a[i]==copy[j]) break;
}
} //去重完成
for(i=1;i<num_c+1;i++)
{
num=0;
for(j=0;j<num_a;j++)
{
if(copy[i]==a[j])
{
num++;
}
}
cont[num_cont++]=num;
} //计算每个元素出现的个数
int temp;
for(i=0;i<num_cont;i++)
{
for(j=i+1;j<num_cont;j++)
{
if(cont[i]<cont[j])
{
temp=cont[j];
cont[j]=cont[i];
cont[i]=temp;
}
}
} //每个元素个数按从大到小排序
printf("%d",cont[0]-cont[num_cont-1]);
return 0;
}
第一次写 嘿嘿