某校2019专硕编程题-前10名学生成绩

网友投稿 850 2022-11-08

某校2019专硕编程题-前10名学生成绩

某校2019专硕编程题-前10名学生成绩

问题

输入学生成绩,并按输入顺序编号,再按成绩进行降序排序,输出前10名的学生成绩,如果学生人数不足十人则只输出仅有的学生成绩。 例如 输入20 30 40 50 70 -1(结束),输出:X号,XX分

注意: 今天看到了原题目,此题目并未假设输入学生成绩互不相等 而原题目中假设了输入的学生成绩互不相等!!!

原题目如下: 输入一组互不相等的百分制成绩(个数<=100),以-1结束,按由高到低的顺序输出前10名的位置号。位置号根据输入的顺序确定,第n个输入的成绩的位置号为n(n为自然数)。输出格式为X号X分。注意输入不足10个时,按照实际的输入个数输出。例如:输入66 88 77 -1,则输出2号88分 3号77分 1号66分。

分析

原题目中的“互不相等的百分制成绩”使用map会很容易

Java实现

static class Student{ int num; float score; Student(Integer num,float score){ this.num = num; this.score = score; } } public static void test05(){ Scanner sc = new Scanner(System.in); List list = new ArrayList<>(); int n = 1; while (true){ float score = sc.nextFloat(); if (score == -1) break; list.add(new Student(n++,score)); } int length = list.size(); while (true){ for (int i = 0; i < length-1; i++) { if (list.get(i).score < list.get(i+1).score){ Student swap = list.get(i); list.set(i,list.get(i+1)); list.set(i+1,swap); } } length--; if (length == 0) break; } Iterator it = list.iterator(); while (it.hasNext()){ if (length > 9) break; Student student = it.next(); System.out.println(student.num+"号 "+student.score+"分"); length++; } }

原题目

public static void test04(){ Scanner sc = new Scanner(System.in); Map map = new HashMap<>(); int k = 0; float[] stu = new float[100]; while (true){ float n = sc.nextFloat(); if (n == -1) break; stu[k++] = n; map.put(n,k); } while (k > 0){ for (int i = k; i > 0 ; i--) { if (stu[i] > stu[i-1]){ float swap = stu[i-1]; stu[i-1] = stu[i]; stu[i] = swap; } } k--; } for (int i = 0; i < stu.length; i++) { if (i == 10) break; System.out.println(map.get(stu[i])+"号 "+stu[i]+"分" ); } }

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:关于SpringCloud Ribbon替换轮询算法问题
下一篇:MyBatis中正则使用foreach拼接字符串
相关文章

 发表评论

暂时没有评论,来抢沙发吧~