原题链接:蓝桥杯算法提高VIP-分数统计
解题思路:这个题目的话,看着是一个简单的题目,但是做到最后一步的人数最多的那个等级中所有人的分数,按从大到小的顺序输出。
其实这个题的先把用来装分数的数组倒叙,然后在把计算人数的也分到一个数组,在创建一个控制循环的开始变量的值,然后判断计算人数的数组等不等于最大人数的值,要是等于,就从num开始
要是不等于,那就给num加上那些不等于最大人数的值,这样的话,就是num的值一直在变化,但是变来变去就是对应的索引值,因为索引值就是有多少人
参考代码:
import java.util.Arrays;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
//利用a来接收一个值,这个值用来控制数组和接收的多少个数据
int a=scanner.nextInt();
//定义一个数组,这个数组用来计数
int []sz=new int[5];
//这个数组用来接收那些输入的分数
int []sz2=new int[a];
//利用for来控制接收的值和计数
for (int i = 0; i < a; i++) {
//接收的值给sz2数组
sz2[i]=scanner.nextInt();
//计算90-100有多少个数
if (sz2[i]>=90&&sz2[i]<=100) {
sz[0]++;
}
//计算80-90有多少个数
else if (sz2[i]>=80&&sz2[i]<=89) {
sz[1]++;
}
//计算70-80有多少个数
else if (sz2[i]>=70&&sz2[i]<=79) {
sz[2]++;
}
//计算60-70有多少个数
else if (sz2[i]>=60&&sz2[i]<=69) {
sz[3]++;
}
//计算0-60有多少个数
else if (sz2[i]>=0&&sz2[i]<=59) {
sz[4]++;
}
}
//利用Math函数的.max()方法,来求出最大值
int max=Math.max(sz[4], Math.max(sz[3], Math.max(sz[2], (Math.max(sz[1], sz[0])))));
//输出计数
for (int i = 0; i < sz.length; i++) {
System.out.print(sz[i]+" ");
}
//换行
System.out.println();
//输出计数最大值
System.out.println(max);
//给sz2排序
Arrays.sort(sz2);
//声明一个数组
int xsz[]=new int[sz2.length];
//给sz2做倒叙的处理,并赋值给xsz,并且下标【索引】是从0开始的
for (int i = 0; i < sz2.length; i++) {
xsz[i]=sz2[sz2.length-i-1];
}
//定义一个输出开始的下表【索引】
int num=0;
//输出最大计数的的值
for (int i = 0; i < sz.length; i++) {
//当sz[i]里的值等于最大计数
if (max==sz[i]) {
//就输出最大计数的值,因为这个for循环是从num开始的,所以当sz[i]里的值不等于最大计数就用num加上sz[i]的值,
//要是等于的话,那就就是从num开始循环一直到num+sz[i]里的值结束
//这样的话,就输出了最大计数的的所有值
for (int j = num; j < num+sz[i]; j++) {
System.out.print(xsz[j]+" ");
}
}
//当sz[i]里的值不等于最大计数
else {
//num就加上sz[i]里的值
num+=sz[i];
}
}
}
}0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复