一道PAT1069 微博转发抽奖 答案错误

img

img


代码如下:


import java.io.*;
import java.util.*;

public class Main {

    //判断某一ID是否中过奖的方法
    public static boolean hasIt(ArrayList<String> lucky,String ID){
        for(String data:lucky){
            if(data.equals(ID)) return true;
        }
        return false;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));

        //total 总转发量
        //start 启示位置
        //step 间隔(或者叫步长)
        String[] info=br.readLine().split(" ");
        int total=Integer.parseInt(info[0]),start=Integer.parseInt(info[1]),step=Integer.parseInt(info[2]);

        //中过奖的人
        ArrayList<String> lucky=new ArrayList<>();

        //转发的人不够抽奖
        if(total<start){
            out.println("Keep going...");
        }


        else{
            //遍历每一个ID
            for(int i=1;i<=total;i++){
                String ID=br.readLine();

                //如果当前ID到达了起始位置,打印ID并加入动态数组
                if(i==start){
                    out.println(ID);
                    lucky.add(ID);
                    continue;
                }

                //如果当前ID已经在起始位置后,并且踩在了间隔决定的抽奖位置上
                if((i-start)%step==0&&i>start){

                    //如果动态数组里没有这个ID,打印并加入
                    if(!hasIt(lucky,ID)){
                        out.println(ID);
                        lucky.add(ID);
                    }
                    //如果已经抽到过了,序号和总数都自减,以此跳过这个ID,并且不会导致无读入使得循环无法结束
                    else{
                        i--;
                        total--;
                    }

                }

            }

        }
        out.flush();
    }
}

测试点2 3错误 请问具体哪里有问题?

img

很尴尬地通知您,第三个输入的数字才是起始位置,第二个才是间隔,你输入反了

img

ps: i--,total-- 倒是挺妙的,但为什么不直接使用System.outScanner啊。而且ArrayList也有contains方法判断是否有这个元素,不用自己写