时间限制: 1Sec 内存限制: 128MB
题目描述:(原题链接)
笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。
输入:
输入只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。
样例输入:
输入样例1
error
输入样例2
olympic
输出:
输出共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”; 第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0。
样例输出 :
输出样例1
Lucky Word
2
输出样例2
No Answer
0
解题思路:
数组存储字母的出现次数,寻找最大最小值,判断是否是素数,条件输出
注意事项:
注意非lucky word的输出
参考代码:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String []args) {
Scanner in =new Scanner(System.in);
String s=in.nextLine();
int cnt[] = new int[s.length()];
for(int i=0;i<s.length();i++) { //统计字母出现的次数
boolean find=false;
for(int j=0;j<s.length();j++) {
if(s.charAt(i)==s.charAt(j)) {
cnt[i]++;
find=true;
}
}
if(!find)
cnt[i]=1;
}
Arrays.sort(cnt);
int tmp=cnt[cnt.length-1]-cnt[0]; //计算出差值
boolean isPrime=true;
if(tmp<2)
isPrime=false;
for(int i=2;i<=Math.sqrt(tmp);i++) { //判断素数
if(tmp%i==0) {
isPrime=false;break;
}
}
if(isPrime) {
System.out.println("Lucky Word");
System.out.println(tmp); //输出该素数
}
else {
System.out.println("No Answer");
System.out.println("0"); //注意非lucky word时输出的是0
}
in.close();
}
}