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); } }