洛谷P1093 奖学金( java实现)

直接暴力解题了😊🤣😒,,,已经通过10AC,,,希望能对你们有帮助

import java.util.Scanner;

public class Main {
//洛谷刷题专用
	public static void main(String[] args) {
		// io命令行,拿扫描器,按行读取
		Scanner scanner = new Scanner(System.in);
		int size = scanner.nextInt();
		int arr[][] = new int[size][3];
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < 3; j++) {
				arr[i][j] = scanner.nextInt();
			}
		

		}

		// 使用二维数组?
		// 关闭扫描器
		scanner.close();
		int temp[][];
		temp = compare(arr);
		for (int i = 0; i < temp.length; i++) {
			for (int j = 0; j < 1; j++) {
				System.out.print(temp[i][j] + " " + temp[i][j + 1]);
			}
			System.out.println();
		}

	}

	// 比较方法,再用一个二维数组存储排序数据,最终将中间数组输出
	public static int[][] compare(int arr[][]) {
		int temp[][] = new int[5][2];
		int counter = 1;
		// 先按总分从高到低排序,
		int provite[][] = new int[arr.length][2];
		// 用一维数组储存总分,将一维数组下标当作对应同学的下标
		for (int i = 0; i < arr.length; i++) {
			provite[i][0] = counter++;
			for (int j = 0; j < arr[0].length; j++) {
				provite[i][1] += arr[i][j];// 完成对总分以及下标的记录
			}
		}
		// 比较
		int t[][] = new int[1][2];// 存储变量
		int max = 0;// 比较值
		for (int j = 0; j < 5; j++) {
			for (int i = 0; i < provite.length; i++) {
				// 找到就清零,一共要找五次,
				if (max < provite[i][1]) {
					max = provite[i][1];
					t[0][0] = provite[i][0];
					t[0][1] = provite[i][1];
					

				}

			}
			provite[t[0][0]-1][1] = 0;// 归零
			max=0;
			// 找到最大值
			// 给与输出数组
			temp[j][0] = t[0][0];// 编号
			temp[j][1] = t[0][1];// 总分

		}
		// 最终得到前五名的编号与中分
		// 如果两个同学总分相同,再按语文成绩从高到低排序,
		int assist = 0;// 辅助变量
		for (int i = 0; i < 5; i++) {
			for (int j = i + 1; j < 5; j++) {
				if (temp[i][1] == temp[j][1]) {
					// 比较语文成绩
					if (arr[temp[i][0]-1][0] < arr[temp[j][0]-1][0]) {
						// 说明前者的语文成绩比后者的低,交换位置
						assist = temp[i][0];
						temp[i][0] = temp[j][0];
						temp[j][0] = assist;
						assist = temp[i][1];
						temp[i][1] = temp[j][1];
						temp[j][1] = assist;

					} else {
						// 如果两个同学总分和语文成绩都相同,
						// 那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的
					if (arr[temp[i][0]-1][1] == arr[temp[j][0]-1][1]) {
						if (temp[i][0] > temp[j][0]) {
							// 说明前者的序号比后者大,要交换位置
							assist = temp[i][0];
							temp[i][0] = temp[j][0];
							temp[j][0] = assist;
							assist = temp[i][1];
							temp[i][1] = temp[j][1];
							temp[j][1] = assist;
						} // 其余不用处理
					}
					}
				}
			}
		}
		return temp;
	}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值