【问题描述】
x星球有26只球队,分别用 a ~ z 的26个字母代表。他们总是不停地比赛。
在某一赛段,哪个球队获胜了,就记录下代表它的字母,这样就形成一个长长的串。
国王总是询问:获胜次数最多的和获胜次数最少的有多大差距?
(当然,他不关心那些一次也没获胜的,认为他们在怠工罢了)
【输入格式】
一个串,表示球队获胜情况(保证串的长度<1000)
【输出格式】
要求输出一个数字,表示出现次数最多的字母比出现次数最少的字母多了多少次。
【样例输入1】
abaabcaa
【样例输出1】
4
【提示】
a 出现 5 次,最多;c 出现1次,最少。
5 - 1 = 4
【样例输入2】
bbccccddaaaacccc
【样例输出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] = {"abcdefghijklmnopqrstuvwxyz"};
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;
}
练习题:次数差
问题描述
x星球有26只球队,分别用 a ~ z 的26个字母代表。他们总是不停地比赛。
在某一赛段,哪个球队获胜了,就记录下代表它的字母,这样就形成一个长长的串。
国王总是询问:获胜次数最多的和获胜次数最少的有多大差距?
(当然,他不关心那些一次也没获胜的,认为他们在怠工罢了)
输入格式
一个串,表示球队获胜情况(保证串的长度<1000)
输出格式
要求输出一个数字,表示出现次数最多的字母比出现次数最少的字母多了多少次。
样例输入1
abaabcaa
样例输出1
4
提示
a 出现 5 次,最多;c 出现1次,最少。
5 - 1 = 4
样例输入2
bbccccddaaaacccc
样例输出2
6
以下选项错误的是?
A | int a[26]; int main() |
B | int cnt[1001]; int main() { string s; cin >> s; int max1 = -1, min1 = 1001; for (int i = 0; i < s.length(); i++) { for (int j = 0; j <= s.length(); j++) { if (s[i] == s[j]) { cnt[i]++; } } } for (int i = 0; i < s.length(); i++) { if (cnt[i] > max1) { max1 = cnt[i]; } if (cnt[i] < min1) { min1 = cnt[i]; } } cout << max1 - min1 << endl; return 0; } |
C | const int N = 1010; int main() int maxn = 0, minn = 1000; cout << maxn - minn << endl; |
D | int main() { char s[1000]; scanf("%s", &s); int len = strlen(s); int helper[256] = {0}; int max = 0, min = len; for (int i = 0; i < len; i++) { helper[s[i]]++; } for (int i = 0; i < 256; i++) { if (helper[i] > max) { max = helper[i]; } if (helper[i] < min && helper[i] != 0) { min = helper[i]; } } printf("%d\n", max - min); return 0; } |
答案:
const int N = 1010;
int cnt[26];
char a[N];
char b[27] = {"abcdefghijklmnopqrstuvwxyz"};
int main()
{
cin >> a;
for (int i = 0; i < 26; i++)
for (int j = 0; a[j]; j++)
if (b[i] == a[j + 1])
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;
}