第十三届蓝桥杯第三期模拟赛第九题java解版

9、试题 I
【问题描述】

​ n 个运动员参加一个由 m 项运动组成的运动会,要求每个运动员参加每个项目。

​ 每个运动员在每个项目都有一个成绩,成绩越大排名越靠前。每个项目,不同运功员的成绩不会相同,因此排名不会相同。(但是不同项目可能成绩会相同)

​ 每个项目的前 k 名分别获得 k 到 1 分,第 i 名获得 max(k+1-i, 0) 分。

​ 每个运动员的总分就是他在每个项目上获得的分数之和。

​ 请计算每个运动员的总分。

【输入格式】

​ 输入的第一行包含两个整数 n, m, k,用一个空格分隔。

​ 接下来 n 行,每行包含 m 个整数,第 i 行第 j 个整数表示第 i 个运动员在第 j 项比赛的成绩。
 

import java.util.Scanner;
public class demo09 {
	static Scanner scanner;
	static int n; 
	static int m;
	static int k;
	static int[][] grade;//存储所有成绩
	static int[] groupGrade;//用于存储当前项比赛成绩
	static int[] finalGrade;//存储选手最终得分
	static int max=0 ;
	static boolean flag = true;
	static int num = 1;
	public static void  main(String args[])
	{
		  scanner= new Scanner(System.in);
		  n = scanner.nextInt();
		  m = scanner.nextInt();
		  k = scanner.nextInt();
		  grade = new int[n][m];
		  groupGrade = new int[n];
		  finalGrade = new int[n];
		  for(int i=0;i<n;i++)
		  {
			  for(int j = 0;j<m;j++)
			  {
				 grade[i][j]=scanner.nextInt();
			  }
		  }
		  for(int j = 0;j<m;j++) {
			  for(int i=0;i<n;i++)
			  {
				  groupGrade[i]=grade[i][j];//获取本项比赛分数
			  }
			  A:while(true) {
				  for(int i=0;i<n;i++)
				  {
					  max = Math.max(groupGrade[i], max);
				  }
			  for(int i=0;i<n;i++)
		  	  {
		  		if(max==0)
	  			  {
		  			 num=1;
	  				 break A;
	  			  }
		  		
		  		  if(max==groupGrade[i])
		  		  {
		  			  finalGrade[i]+=getGrade(num);
		  			  num++;
		  			  groupGrade[i] = 0;
		  			  max = 0;
		  			  continue A;
		  		  }
		  	  }
			  }
		  }
		  for(int e : finalGrade)
		  {
			  System.out.print(e+" ");
		  }
		 
	}
	public static int getGrade(int x)
	{
		return Math.max(k+1-x, 0);
	}
	
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值