【考点】
本题考查对ascll的运用,在数组内求出最大值和最小值及判断质数。
【题目描述】
笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!
这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn−minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。
【输入】
只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。
【输出】
共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”;
第二行是一个整数,如果输入单词是Lucky Word,输出maxn−minn的值,否则输出0。
【输入样例】
error
【输出样例】
Lucky Word
2
【提示】
样例输入:
样例 #2:
olympic
样例输出:
样例 #2:
No Answer
0
【解题思路】
首先输入一个字符串a[200],接着将每个字符按照ascll表上的顺序一一对应,将每个单词出现的次数按顺序依次加入新列表b[25]中。然后利用maxn和minn求出最大值和最小值,最后判断是否为质数输出。
(若不清楚ascll表具体内容,您可以在浏览器上输入关键词“ascll表”获取信息)
【题解代码】
#include <bits/stdc++.h>
using namespace std;
int f1(int b[27]){
int maxn=-1,minn=20000; //maxn保存最大值,minn保存最小值
for (int i=0;i<=25;i++){
if (b[i] > maxn) maxn = b[i]; //求出最大值
if (b[i]<minn && b[i]!=0) minn = b[i]; //求出最小值
}
return maxn-minn; //返回最大值和最小值之差
}
bool f2(int n){
if (n<=1) return false; //0和1不是质数,因此返回false
for (int i=2;i*i<=n;i++){
if (n%i==0) return false; //判断是否为质数(若是,返回true;若不是,返回false)
}return true;
}
int main(){
char a[101]; //存储输入的字符串
int t=1,b[27]={0},item; //b[27]储存各字母出现次数,
while (cin >> a[t]) t++; //输入(输入完毕后输入Ctrl+Z再回车即可退出输入)
for (int i=0;i<=t;i++) b[a[i]-97]++; //按照ascll表顺序将每个字母出现次数保存入b数组
if (f2(f1(b)) == true) cout << "Lucky Word" << endl << f1(b); //输出
else cout << "No Answer" << endl << 0; //输出
return 0;
}