杂题——1106: 奖学金

题目描述

某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的。

任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分) 是:

7 279

5 279

这两行数据的含义是:总分最高的两个同学的学号依次是7号、5号。这两名同学的总分都是 279 (总分等于输入的语文、数学、英语三科成绩之和) ,但学号为7的学生语文成绩更高一些。如果你的前两名的输出数据是:

5 279

7 279

则按输出错误处理,不能得分。

输入格式

输入包含n+1行:

第1行为一个正整数n,表示该校参加评选的学生人数。

第2到n+1行,每行有3个用空格隔开的数字,每个数字都在O到100之间z第1行的3个数 字依次表示学号为j-1的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为l~n (恰好是输入数据的行号减1)。

所给的数据都是正确的,不必检验。

输出格式

输出共有5行,每行是两个用空格隔开的正整数,依次表示前5名学生的学号和总分。

样例输入

6

90 67 80

87 66 91

78 89 91

88 99 77

67 89 64

78 89 98

样例输出

6 265

4 264

3 258

2 244

1 237
分析:

  • 使用普通for循环,先对总分进行排序(冒泡排序法的思想,只不过是把重的冒上去),再对语文成绩进行排序,最后对学号进行排序
  • 另写一个交换行的方法,方便重复调用
  • 思路简单粗暴
java 复制代码
package no1_1;
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n=scanner.nextInt();
        int[][] score=new int[n][3];
        for(int i=0;i<n;i++) {
            scanner.nextLine();
            int chinese=scanner.nextInt();
            int math=scanner.nextInt();
            int english=scanner.nextInt();
            score[i][0]=chinese+math+english;//总分
            score[i][1]=chinese;//语文分数 
            score[i][2]=i+1;//学号
        }
        for(int i=0;i<n-1;i++) {
        	for(int j=i+1;j<n;j++) {
        		if(score[i][0]<score[j][0]) {//比较总分
        			swap(score,i,j);
        		}else {
        			if(score[i][0]==score[j][0]) {//总分相同,比较语文成绩
                		if(score[i][1]==score[j][1]) {//语文成绩相同
                			if(score[i][2]>score[j][2]) {//比较学号
                    			swap(score,i,j);
                			}
                		}else {//语文成绩不同
                			if(score[i][1]<score[j][1]) {//比较语文
                    			swap(score,i,j);
                			}        		
                		}
                	}
        		}
        	}
        }
        for(int i=0;i<5;i++) {
        	System.out.println(score[i][2]+" "+score[i][0]);
        }

    }
    public static void swap(int[][] score,int i,int j) {//交换score数组里的i行和j行
    	int a=score[i][0];
    	int b=score[i][1];
    	int c=score[i][2];
    	score[i][0]=score[j][0];
    	score[i][1]=score[j][1];
    	score[i][2]=score[j][2];
    	score[j][0]=a;
    	score[j][1]=b;
    	score[j][2]=c;

    }
}
相关推荐
菜菜的顾清寒3 分钟前
力扣HOT100(47) 二叉树的层序遍历
算法·leetcode·深度优先
周末也要写八哥4 分钟前
牛顿迭代Python代码实现
算法
KaMeidebaby18 分钟前
卡梅德生物技术快报|基因测序技术在 46,XY 性发育障碍变异筛查中的流程与数据分析
服务器·前端·数据库·人工智能·算法·数据挖掘·数据分析
摇滚侠18 分钟前
浏览器调试工具 检查元素 谷歌模拟器 控制台 断点调试
java·html
ZengLiangYi20 分钟前
SourceAdapter 插件架构详解
javascript·算法·架构
妄想出头的工业炼药师28 分钟前
特征检测和特征筛选
算法·开源
cxr82830 分钟前
高分子复合材料 AI 逆向设计合——学证明、算法实现、验证数据与学术资源全集
人工智能·线性代数·算法
心之伊始32 分钟前
Spring Boot 接入 MCP 实战:用 Spring AI 调用本地工具的最小闭环
java·spring boot·agent·spring ai·mcp
ZengLiangYi37 分钟前
如何解析 5 种完全不同格式的 AI 对话
javascript·人工智能·算法