P1125 [NOIP 2008 提高组] 笨小猴

我理解的题目意思

一个字符串中出现次数最多的字母的出现次数是 maxn ,minn 是出现次数最少的字母的出现次数,如果 maxn−minn 是一个质数,那么输出 Lucky Word,再换行输出 maxn−minn 的值;否则输出 No Answer,,换行输出 0。

$$字符串长度小于 100$$

解题思路

依题意模拟即可,用数组b记录字母出现次数,遍历出maxn、minn,再判断maxn−minn是否为质数。

代码:

#include <iostream>
#include <algorithm>
using namespace std;

char a[105];

int main()
{
    cin >> a;
    int b[26] = {0};
    for (int i = 0; a[i] != '\0'; i++)
    {
        b[a[i] - 'a']++;
    }
    int maxn = -1, minn = 105;
    for (int i = 0; i < 26; i++)
    {
        if (b[i] > 0)
        {
            maxn = max(maxn, b[i]);
            minn = min(minn, b[i]);
        }
    }
    int ans = maxn - minn;
    for (int i = 2; i <= ans / 2; i++)
    {
        if (ans % i == 0 && ans != 2)
        {
            cout << "No Answer" << endl
                 << 0;
            return 0;
        }
    }
    if (ans < 2)
        cout << "No Answer" << endl
             << 0;
    else cout << "Lucky Word" << endl
         << ans;

    return 0;
}