2020 计算机能力挑战赛 模拟题

4.由N(N<=10000)个整数组成的数组,其中连续K(K<=200)个元素构成一个区间,称为K区间。一个K区间中所有素数的和记为Sk,请计算整个数组中,所有K区间中的最大Sk值,并输出。
输入说明:第一行是两个整数N和K,第二行输入N个数,表示数组中的元素。
输出说明:最大Sk值
输入样例:8 2
12 23 27 34 19 17 45 8
输出样例:36

 

public static void main(String [] s){   
   Scanner input=new Scanner(System.in);
       int N= input.nextInt();
       int k=input.nextInt();
       int [] array=new int[N];
       for(int i=0;i<N;i++)
           array[i]=input.nextInt();
       int maxSum=0;
       for(int i=0;i<=N-k;i++)
       {
           int sum=0;
           for(int j=0;j<k;j++)
           {
               if(IStarget(array[i+j]))
                   sum+=array[i+j];
           }
           maxSum=Math.max(sum,maxSum);
       }
       System.out.println(maxSum);
}
    public static  boolean IStarget(int num)
    {
        for(int i=2;i<num/2;i++)
            if(num%i==0)
                return false;
            return true;
    }

 

 

5.仓库新进了几批物资,只知道每批物资的数量和单价,请编写程序,按照每种物资的总价值,由高到低次序输出。
输入说明:第1行 一个整数N,表明物资的批次数量
第2-N+1行,每批物资的类别、数量及单价,中间用空格隔开,其中类别用A-Z加以区分。
输出说明:按物资价值降序输出排序结果,每行输出一种物资。
输入样例:5
A 5 10.00
B 3 2.00
A 5 8.00
B 3 2.50
C 10 3.50
输出样例:A 90.00
C 35.00
B 13.50

 public static void main(String [] s){  
    Scanner input=new Scanner(System.in);
        int x=input.nextInt();
        Map<Character,Double> hs=new HashMap<>();
        for(int i=0;i<x;i++)
        {
            char index=input.next().charAt(0);
            hs.put(index,hs.getOrDefault(index,0.0)+ input.nextInt()*input.nextDouble());
        }

       while(!hs.isEmpty())
       {
           double money=0;
           char index=‘a‘;
           for(char key:hs.keySet())
           {
               if(hs.get(key)>money)
               {
                   index=key;
                   money=hs.get(key);
               }
           }
           System.out.println(index+" "+hs.get(index));
           hs.remove(index);
       }
}

 

2020 计算机能力挑战赛 模拟题

上一篇:Vector ArrayList


下一篇:README.md的基本语法使用