原题链接:蓝桥杯算法提高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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复