解题思路:
1.读取输入的单词。
2.创建一个长度为26的数组counts用于统计每个字母的出现次数。初始将所有字母的计数设置为0。
3.遍历单词中的每个字符,将每个字母的出现次数加1到counts数组的对应位置上。
4.找出counts数组中的最大值maxCount和最小值minCount。
5.计算maxCount和minCount的差值diff。
6.创建一个方法isPrime,用于判断一个数是否是质数。在实现isPrime方法时,可以使用简单的迭代来检查是否有除了1和它本身以外的其他因子,如果有则不是质数,否则是质数。
7.判断diff是否为质数,如果是,则输出"Lucky Word"和diff的值;否则输出"No Answer"和0。
注意事项:
当一个数不是质数时,必定存在两个约数,一个大于等于sqrt(n),另一个小于sqrt(n)。
利用这种特性,可以对方法1进行改进,只判断数n能否被小于sqrt(n)的数整除。
参考代码:
import java.util.Scanner;
public class LuckyWord {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);//键盘录入
String word = sc.nextLine();//输入的单词
//建立数组,统计字母出现的次数
int[] counts = new int[26];
//word.toCharArray() 将字符串转换为字符数组
for (char c : word.toCharArray()) {
counts[c - 'a']++;
}
int maxCount = 0;//用于统计counts数组中的最大值maxCount
//用于初始化 minCount 变量,
// 将其设置为整数的最大值 Integer.MAX_VALUE
//目的是为了确保在遍历 counts 数组时可以正确地找到出现次数最少的字母
int minCount = Integer.MAX_VALUE;
for (int count : counts) {
if (count > maxCount) {
maxCount = count;
}
if (count < minCount && count > 0) {
minCount = count;
}
}
//计算最大与最小之间的差值
int diff = maxCount - minCount;
//引用自定义的方法,用于判别是否为质数
if (isPrime(diff)) {
System.out.println("Lucky Word");
System.out.println(diff);
} else {
System.out.println("No Answer");
System.out.println(0);
}
//释放资源
sc.close();
}
//判别质数的方法
private static boolean isPrime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
}
0.0分
0 人评分