#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个字母出现的次数进行比较了,循环比较,得出出现次数最多和次数最少的字母的次数
- 最后将这两个数求差,判断是否为质数,然后按格式要求输出即可