第九届蓝桥杯——次数差

【问题描述】

x星球有26只球队,分别用 a ~ z 的26个字母代表。他们总是不停地比赛。
在某一赛段,哪个球队获胜了,就记录下代表它的字母,这样就形成一个长长的串。
国王总是询问:获胜次数最多的和获胜次数最少的有多大差距?
(当然,他不关心那些一次也没获胜的,认为他们在怠工罢了)

【输入格式】
一个串,表示球队获胜情况(保证串的长度<1000)

【输出格式】
要求输出一个数字,表示出现次数最多的字母比出现次数最少的字母多了多少次。

【样例输入1】

abaabcaa

【样例输出1】

4

【提示】
a 出现 5 次,最多;c 出现1次,最少。
5 - 1 = 4

【样例输入2】

bbccccddaaaacccc

扫描二维码关注公众号,回复: 10781556 查看本文章

【样例输出2】

6


题解:

#include <cstdio>
#include <cstring> 
#include <iostream>
#include <algorithm>

using namespace std;
 
const int N = 1010;
int cnt[26];
char a[N];
char b[27] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};

int main()
{
    cin >> a;
    for (int i = 0; i < 26; i ++)
        for (int j = 0; a[j]; j ++)     // 字符串数组以 '\0' 结尾,可用作循环结束标志
        	if(b[i] == a[j]) cnt[i] ++;
      
	 int maxn = 0, minn = 1000;   
     for (int i = 0; i < 26; i ++)
	 	if(cnt[i])                      // 排除一次都没有获胜的队伍
	 	{
	 		maxn = max(maxn, cnt[i]);
 	    	minn = min(minn, cnt[i]);
	 	}
 	
    cout << maxn - minn << endl;
    return 0;
}

如果感觉这篇文章对你有帮助的话,不妨点一个赞,十分感谢(✪ω✪)。
printf(“点个赞吧!”);
cout <<“点个赞吧!”;
System.out.println(“点个赞吧!”);
↓↓↓

发布了63 篇原创文章 · 获赞 5 · 访问量 828

猜你喜欢

转载自blog.csdn.net/weixin_46239370/article/details/105484359