当前位置: 代码迷 >> 综合 >> 【字符串】【JAVA】P1125 [NOIP2008 提高组] 笨小猴
  详细解决方案

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

热度:94   发布时间:2023-12-01 15:09:08.0

漫长的洛谷之旅

思路:

我觉得这一题的问题在于存放出现最多的字母的次数,和出现次数最少的字母的次数,解决了这个问题,其他的也就很好解决了,首先通过一个容器将每个字符出现的次数记录下来,那当然是要用数组了,顺便利用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时肯定不是素数,返回falsefor(int i=2;i<max-min;i++) {
    if((max-min)%i==0) {
    flag=false;}}return flag;}
}
  相关解决方案