解题思路:
1.由题意得,需要输入一个单词,并且只有小写字母组成,然后需要找出字母出现最多的次数为max,然后找到出现次数最少的字母为min,这两个变量存储的都是次数,那么我们可以想到,小写字母最多只有26个,所以可以利用数组计数来求解
2.在数组计数中,之前接触到的都是数字计数,此时为字符,字符也有相对应的ascll码,所以,可以使用同样的方法
3.设置一个整型数组,int a[30],用来存放每个字母出现的次数,从下标0和1开始都行
4.输入一个字符串s,然后对字符串开始进行遍历,因为小写字母a的ascll码是97,那么我们让所有的字符减去97,此时字符a出现的话,对应的就是a[0]的位置,后面的依次类推,a[s[i]-97]++;
5.将所有的字母计数完毕后,剩下的就是找出最大值和最小值,利用max和min条件判断即可
6.求出max-min的值,然后判断是否为质数,求解质数,先对1,2进行特判,1不是质数,2是质数,然后对2以后的数字判断,如果能被2和比它小1的数字整除,说明不是质数
7.按要求输出即可
#include<bits/stdc++.h>
using namespace std;
bool judge(int x)//判断是否为质数
{
if(x==1||x==0)//如果这个数是0或者1
return false;//返回错误
for(int i=2;i<x;i++)//依次遍历如果能被2和x-1之间的数整除
{
if(x%i==0)
return false;//返回错误
}
return true;//如果执行到此歩,返回正确
}
int main()
{
string s;
cin>>s;//输入字符串
int max=0,min=105,sum;
for(int i=0;i<s.length();i++)//遍历每个字符
{
sum=0;//设置累加器
for(int j=0;j<s.length();j++)//用来做比对的字符数组
{
if(s[i]==s[j])//如果字符相等
sum++;//累加器增加
}
if(sum>max)//判断取最大值
{
max=sum;
}
if(sum<min)//判断取最小值
{
min=sum;
}
}
if(judge(max-min)==1)//如果最大值减去最小值的差为质数
{
cout<<"Lucky Word"<<endl;//输出对应内容
cout<<max-min;//输出两数之差
}
else
{
cout<<"No Answer"<<endl;//否则,输出对应内容
cout<<0;//输出0
}
return 0;
}