#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
bool isPrime(int n)
{
    if(n<=1)
    {
        return false;
    }
    if(n==2)
    {
        return true;
    }
    if(n%2==0)
    {
        return false;
    }
    for(int i=3;i<=sqrt(n);i++)
    {
        if(n%i==0)
        {
            return false;
        }
    }
    return true;
}
int main()
{   
    char arr[100];
    cin>>arr;
    int len=strlen(arr);
    int count[26]={0};
    for(int i=0;i<len;i++)
    {
        count[arr[i]-'a']++;
    }
    int maxn=0;
    int minn=len;
    for(int i=0;i<26;i++)
    {
        if(count[i]==0)
        {
            continue;
        }
        if(count[i]>maxn)
        {
            maxn=count[i];
        }
        if(count[i]<minn)
        {
            minn=count[i];
        }
    }
    if(isPrime(maxn-minn))
    {
        cout<<"Lucky Word"<<endl;
        cout<<maxn-minn<<endl;
    }
    else 
    {
        cout<<"No Answer"<<endl;
        cout<<"0"<<endl;
    }
    return 0;
}
  • 首先题目给出输入字符串的长度小于100,我们暂且设定字符数组长度是100
  • 但是在输入的时候我们可以不使用循环来输入,因为这样会造成空间浪费或者读入脏数据,在输入的时候直接使用数组名即可,相当于传入了首元素地址
  • 输入完成以后,我们使用 <cstring> 里面的 strlen() 函数先来统计输入字符的长度
  • 设定一维数组来存储小写字母(26个)
  • 在输入的字符串长度以内,循环统计每个小写字母出现的个数,arr[i]-'a' 就是将小写字母转换成数字,从而进行次数累加
  • 将出现次数最多 maxn 先置为0,把 minn 置为字符串长度,不能置为0,因为次数不可能小于0,maxn 和 minn 是后面用来比较次数的,count 才是用来统计次数的,这两个要区分清楚
  • 然后就是对26个字母出现的次数进行比较了,循环比较,得出出现次数最多和次数最少的字母的次数
  • 最后将这两个数求差,判断是否为质数,然后按格式要求输出即可