题目描述
给定一个百分制成绩T,将其划分为如下五个等级之一:
90 ~ 100为A,80 ~ 89为B,70 ~ 79为C,60 ~ 69为D,0~59为E
现有若干百分制成绩(成绩个数不超过1000个),请你统计五个等级段的人数,并找出人数最多的那个等级段,按照从大到小的顺序输出该段中所有人成绩(保证人数最多的等级只有一个)。
输入
第一行是成绩的个数 n
第二行是学生的成绩,若干0~100的正整数,用空格隔开
输出
第一行为5个正整数,分别表示A,B,C,D,E五个等级段的人数
第二行一个正整数,表示人数最多的等级段中人数
接下来一行若干个用空格隔开的正整数,表示人数最多的那个等级中所有人的分数,按从大到小的顺序输出。
样例输入
10
100 80 85 77 55 61 82 90 71 60
样例输出
2 3 2 2 1
3
85 82 80
解题思路:
这道题不难,就一步步来就好了,先存值,然后判断分级,打印每个等级成绩的个数,找最大的个数,打印最大个数,排序,将最大值所对应的等级进行打印。具体思路,代码中注释很详细。
代码如下:
import java.util.Arrays;
import java.util.Scanner;
public class Cyyw1500 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int [] arr = new int [5]; // 储存每一个等级成绩的数量
int [] num = new int [n]; // 储存成绩
// 输入成绩
for (int i = 0; i < num.length; i++) {
num[i] = sc.nextInt();
}
// 获取每一个等级成绩的数量
for (int i = 0; i < num.length; i++) {
if (num[i]>=90&&num[i]<=100) {
arr[0]++;
} else if (num[i]>=80&&num[i]<=89) {
arr[1]++;
} else if (num[i]>=70&&num[i]<=79) {
arr[2]++;
} else if (num[i]>=60&&num[i]<=69) {
arr[3]++;
} else if (num[i]>=0&&num[i]<=59) {
arr[4]++;
}
}
int max = 0; // 等级成绩个数最多的
int count = 0; // 定义那个等级
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" "); // 打印个等级成绩个数
// 找最多的
if (arr[i] > max) {
max = arr[i];
count = i;
}
}
System.out.println();
System.out.println(max); // 最大值
Arrays.sort(num); // 排序
count = arr.length - count; // 上面定义的时候是从大到小,在这里我反过来了
for (int i = num.length-1; i > 0; i--) {
// 这个为5,相当于等级为A
if (count == 5) {
if (num[i] >= (count+4)*10) {
System.out.print(num[i] + " ");
}
} else if (count == 1) { // 等级为E
if (num[i] < (count+5)*10) {
System.out.print(num[i] + " ");
}
} else { // 其他
if (num[i] >= (count+4)*10 && num[i] < (count+5)*10) {
System.out.print(num[i]+" ");
}
}
}
}
}