题解 | #[NOIP2007]奖学金#

[NOIP2007]奖学金

https://ac.nowcoder.com/acm/problem/16639

欲解决此题,我们可以先创建一个二维数组a,用来存取三门的分数,再创建一个一维数组b,用来存取这三门成绩的总分,最后创建一个数组c,用来存取成绩由高到低,你会思考,为什么要创建b和c数组呢,元素不都是总成绩嘛?因为b数组中的索引值可以作为学号的标记,学号等于b数组索引值加一,再通过双层for循环遍历b和c,查找对应的总成绩,并找出语文成绩最高的总分成绩,进行输出,对已经输出的进行赋值为0,表示已经输出,这样就可以做到不会重复的输出相同的成绩,即可完成此题

import java.util.*; public class Main {

public static void main(String[] args) {
	Scanner sc=new Scanner(System.in);
	int n=sc.nextInt();
	
	int[][] a=new int[n][3];
	int[] b=new int[n];
	for(int i=0;i<n;i++) {
		
		for(int j=0;j<3;j++) {
			a[i][j]=sc.nextInt();
			b[i]=b[i]+a[i][j];
		}
		
	}
	int[] c=new int[n];
	for(int i=0;i<n;i++) {
		c[i]=b[i];
	}
	Arrays.sort(c);
	int temp;
	for(int i=1;i<n;i++) {
		for(int j=0;j<n-i;j++) {
			if(c[j]<c[j+1]) {
				temp=c[j];
				c[j]=c[j+1];
				c[j+1]=temp;
			}
		}
	}
	int yuwen=0;
	
	int v=0;
	for(int i=0;i<5;i++) {
		int max=0;
		for(int j=0;j<n;j++) {
			if(c[i]==b[j] ) {
				yuwen=a[j][0];
				if(yuwen>max) {
					v=j;
					max=yuwen;
				}

				
				
			}
		}
		System.out.println((v+1)+" "+b[v]);
		b[v]=0;
		
	}

}

全部评论

相关推荐

重生2012之我是java程序员:换个稍微正式点的照片吧
点赞 评论 收藏
分享
11-18 15:57
门头沟学院 Java
最终归宿是测开:这个重邮的大佬在重邮很有名的,他就喜欢打92的脸,越有人质疑他,他越觉得爽😂
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务