P1125 [NOIP2008 提高组] 笨小猴 (Java)
发布日期:2021-05-08 22:12:18 浏览次数:15 分类:精选文章

本文共 1634 字,大约阅读时间需要 5 分钟。

为了解决这个问题,我们需要判断给定的单词是否为“Lucky Word”,即单词中出现次数最多的字母和出现次数最少的字母出现次数的差值是否为质数。我们将通过统计各个字母的出现次数并检查差值是否为质数来实现这一点。

方法思路

  • 统计字母出现次数:我们使用一个长度为26的数组来统计每个字母的出现次数。
  • 找出最大值和最小值:遍历该数组找到出现次数最多(maxn)和出现次数最少(minn)的值。注意,字母未出现的位置会被认为是出现次数0。
  • 计算差值并检查是否为质数:计算maxn和minn的差值,检查该差值是否为质数。如果是,则单词为“Lucky Word”;否则,则输出“No Answer”。
  • 解决代码

    import java.util.Scanner;public class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        String s = sc.nextLine();        int[] counts = new int[26];        for (int i = 0; i < s.length(); i++) {            counts[s.charAt(i) - 'a']++;        }        int max = -1, min = 99999;        for (int i = 0; i < 26; i++) {            if (counts[i] > max) {                max = counts[i];            }            if (counts[i] < min) {                min = counts[i];            }        }        int difference = max - min;        boolean isPrime = false;        if (difference >= 2) {            isPrime = true;            for (int i = 2; i < difference; i++) {                if (difference % i == 0) {                    isPrime = false;                    break;                }            }        }        if (isPrime) {            System.out.println("Lucky Word");            System.out.println(difference);        } else {            System.out.println("No Answer");            System.out.println(0);        }    }}

    代码解释

  • 读取输入:使用Scanner读取输入的单词。
  • 统计字母出现次数:通过遍历单词的每个字符,更新计数器数组counts,记录每个字母的出现次数。
  • 初始化max和min:最大值初始化为-1,最小值初始化为99999,然后遍历计数器数组,找出实际的最大值和最小值。
  • 计算差值:计算max和min的差值,并检查该差值是否为质数。
  • 输出结果:如果差值为质数,输出“Lucky Word”和差值;否则,输出“No Answer”和0。
  • 这个方法确保了我们能够正确判断单词是否为“Lucky Word”,并高效地处理输入和统计操作。

    上一篇:P1271 【深基9.例1】选举学生会 (Java & C++)
    下一篇:P1765 手机 (Java)

    发表评论

    最新留言

    能坚持,总会有不一样的收获!
    [***.219.124.196]2025年04月18日 21时04分26秒