PAT1059 乙级 java

博主在解决PAT1059乙级编程题时遇到两个测试点超时的问题,主要难点在于判断素数和处理输入的嵌套循环导致效率低下。博主感到困扰并希望在评论区得到关于如何避免超时的优化建议。
摘要由CSDN通过智能技术生成

两个测试点超时,为什么窝的代码这么容易超时啊,难受,判断素数和输入嵌套,真的不知道怎么才能不超时,有木有好心人评论区给点建议QAQ

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.text.DecimalFormat;
import java.util.HashMap;

public class p1059 {
    public static void main(String[] args) throws Exception{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        int num=Integer.parseInt(br.readLine());
        HashMap<Integer, String> hashMap = new HashMap<>();
        //得到初始化的结果集
        for (int i = 0; i < num; i++) {
            int id=Integer.parseInt(br.readLine());
            if(i!=0){
                if(isPrime(i+1)){//判断排名是否为素数
                    hashMap.put(id, "Minion");
                }else{
                    hashMap.put(id,"Chocolate" );
                }
            }else{
                hashMap.put(id,"Mystery Award" );
            }
        }

        //输入要查找的ID内容
        int searchCount=Integer.parseInt(br.readLine());
        String[] result=new String[searchCount];
        for (int i = 0; i < searchCount; i++) {
            int id=Integer.parseInt(br.readLine());
            DecimalFormat df=new DecimalFormat("0000");
            String idStr=df.format(id);
            if(hashMap.containsKey(id)){
                //格式化ID
                if(hashMap.get(id)!="hasGotten") {
                    result[i] = idStr + ": " + hashMap.get(id);
                    hashMap.put(id,"hasGotten" );
                }else{
                    result[i] = idStr +": Checked";
                }
            }else{
                //格式化ID
                result[i]=idStr+": Are you kidding?";
            }
        }
        for (String s : result) {
            System.out.println(s);
        }

    }
    public static boolean isPrime(int num){
        if(num==2){
            return true;
        }
        int i=1;
        int count=0;
        while(i<=Math.ceil(Math.sqrt(num))){
            if(num%i==0){
                count++;
            }
            i++;
        }
        if(count>1){
            return false;
        }else{
            return true;
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值