【字符串】【JAVA】P1125 [NOIP2008 提高组] 笨小猴

漫长的洛谷之旅

思路:

我觉得这一题的问题在于存放出现最多的字母的次数,和出现次数最少的字母的次数,解决了这个问题,其他的也就很好解决了,首先通过一个容器将每个字符出现的次数记录下来,那当然是要用数组了,顺便利用char类型的本质是ASCII码的特性,数组的索引就代表不同的字母,只不过是数字表示的,接下来一顿操作就出来了。

注意

在运行过程中也发现了一些问题
1.数组的默认值是0,那么就会扰乱min的正常赋值,所以在给求min的时候要确保当前数组值不是0.
2.max-min可能小于2,当小于2的时候就不要进行质数判断了,这个条件不要漏掉了。

package LOQ.字符串;
import java.util.Scanner;
/*
笨小猴
 */
public class P1125 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //读取字符串
        char[] chars = sc.nextLine().toCharArray();
        //数组存放出现最多的字符次数 97-122之间
        int[] arr = new int[123];
        for(int i=0;i<chars.length;i++) {
            arr[chars[i]]++;
        }
        //求最大出现次数和最小出现次数
        int min=26,max=0;
        for(int i=97;i<=122;i++) {
            if(arr[i]>=max) {
                max=arr[i];
            }
            if(arr[i]<=min && arr[i]!=0) {  //确保min不会被赋予0,因为数组中未赋值的0会影响结果
                min=arr[i];
            }
        }
        if(getSu(min,max)) {
            System.out.println("Lucky Word");
            System.out.println(max-min);
        } else {
            System.out.printf("No Answer\n0");
        }
    }
    public static boolean getSu(int min,int max) {
        boolean flag=true;
        if(max-min<2) return false; //当差值小于2时肯定不是素数,返回false
        for(int i=2;i<max-min;i++) {
            if((max-min)%i==0) {
                flag=false;
            }
        }
        return flag;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值