科大訊飛2019暑期實習筆試題

1、改爲績

題目:

  華老師的n個學生參加了一次模擬測驗,考出來的分數很糟糕,可是華老師能夠將成績修改成[0,100]中的任意值,因此他想知道,若是要使全部人的成績的平均分很多於X分,至少要改動多少我的的分數?java

輸出和輸出說明:

輸入數組

第一行一個數T,共T組數據(T≤10)spa

接下來對於每組數據:code

第一行兩個整數n和X。(1≤n≤1000, 0≤X≤100)blog

第二行n個整數,第i個數Ai表示第i個學生的成績。(0≤Ai≤100)rem

輸出get

共T行,每行一個整數,表明最少的人數。class

輸入和輸出示例:

  樣例輸入:import

2
5 60
59 20 30 90 100
5 60
59 20 10 10 100List


  樣例輸出:

1 2

解題思路:

  要想改動最少的人來達到新的平均分,就要找出原來分數的最低分,將其改成100,以後進行斷定。

代碼實現:

package stuSys; import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int T = sc.nextInt(); for (int i = 0;i<T ;i++ ) { int n = sc.nextInt(); int x = sc.nextInt(); int[] scores = new int[n]; for (int j =0;j<n ;j++ ) { scores[j] = sc.nextInt(); } int answer = updataNum(scores,n,x); System.out.println(answer); } } //修改爲績的次數
    private static int updataNum(int[] scores,int n, int x){ int count = 0; while(tempAvgScores(scores,n)<x){ count++; int index = findMinScores(scores); scores[index] = 100; } return count; } //返回平均分
    private static int tempAvgScores(int[] scores,int n){ int sumResult = 0; for (int i=0;i<n ;i++ ) { sumResult +=scores[i]; } return sumResult/n; } //找出數組中最小數字的下標
    private static int findMinScores(int[] scores){ int index = 0; for(int i=0;i<scores.length;i++){ if(scores[index]>scores[i]) index = i; } return index; } }

2、殺手

題目:

  有n個殺手排成一行,每一個殺手都有一個不一樣的編號(編號爲1-n),在每一個夜晚,殺手都會行動,若是某個殺手編號大於他右邊的殺手的編號,他就會殺死他右邊的殺手,殺手的行動是瞬間的,所以一我的可能某一個演完既殺死了別人,又被別人殺死了,例如3,2,1這個順序,在第一個夜晚2會殺死1,同時3會殺死2.顯然易見,一段時間以後,就不會有人殺死或者被殺了,平安夜也就來了,請問在平安夜以前有多少個夜晚?

輸入輸出說明:

  輸入 

第一行是一個整數n(1<=n<=100000),表示殺手的數量。 接下來一行有n個數,是一個1-n的全排列。

  輸出

輸出包含一個整數,表示平安夜以前經歷個多少了夜晚。

 

示例:

樣例輸入
10
10 9 7 8 6 5 3 4 2 1
樣例輸出
2

解題思路:

從題意中能夠理解到,若是要殺手中止殺人,須要知足如下條件之一:

  一、只剩下一我的;

  二、殺手的序號排列爲降序排列;

只有知足這兩個條件之一的時候,殺手的序號纔不會發生變化,即不會再有人殺或被殺,能夠根據這個條件進行判斷,若是不知足,就比較先後數的大小,進行相應的remove操做,若是知足,就中止。

代碼實現:

import java.util.Scanner; import java.util.Arraylist; import java.util.List; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); List<Integer> listKiller = new ArrayList<Integer>(); for (int i=0;i<n ;i++) { listKiller.add(sc.nextInt()); } int nightCount = 0; int rowSize = listKiller.size(); while(listKiller.size()>1) { for (int i = listKiller.size()-1; i >= 1; i--) { if (listKiller.get(i)<listKiller.get(i-1)) { listKiller.remove(i); } } //判斷listKiller大小是否發生變化
                    if(listKiller.size()==rowSize) break; else { rowSize = listKiller.size(); nightCount++; } } System.out.println(nightCount); } }
相關文章
相關標籤/搜索