题解 | #[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;
		
	}

}

全部评论

相关推荐

但听说转正率很低,我现在有在实习了,好纠结要不要去
熬夜脱发码农:转正率低归低,但是实习的经历你可以拿着,又不是说秋招不准备了
点赞 评论 收藏
分享
06-23 11:43
门头沟学院 Java
allin校招的烤冷...:我靠,今天中午我也是这个hr隔一个星期发消息给我。问的问题还是一模一样的😅
点赞 评论 收藏
分享
07-01 13:37
门头沟学院 Java
steelhead:不是你的问题,这是社会的问题。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务