某大学的《软件工程》必修课分为理论和实践部分。理论部分由该校教授完成授课;而实践部分是由第三方的公司主导,需要同学们在五周时间内自学 HTML、css、JavaScript、vue、Python、django 等技术,并组队完成一个真实的互联网商业应用。
参与这个课程的有 个学生,分成了不超过 26 个队伍,每个队伍用 A 到 Z 来表示。每个队伍都会完成一个项目,并以队伍为单位,给所有队伍(包括自己队伍)打分,范围是 0 到 100 的整数。
为了平息学生对这门课产生的出多问题的不满(比如工作量太大、时间过于紧张、考核方式不公平等),老师决定使用一种“看起来”很公平的方式来决定每组队伍的项目得分:
对于某个队伍,首先计算所有队伍(包括自己)给这个队伍评分的平均值,然后剔除掉和这个平均值差别超过 15 分的评分(保证不会出现所有的评分全部被剔除的情况),最后再对剩余的评分求平均值,四舍五入取整后作为这个队伍的项目得分。
对于每一个同学,我们已经得知他们的队伍代号和理论成绩(也是 0 到 100 分的整数)。这位同学的最后得分就是 的理论成绩加上 的所在队伍的项目得分,然后四舍五入取整。
现在老师想知道所有同学的分数排行。请按最后得分从高到低的顺序,输出每位同学的得分和他所在的队伍。
输入格式
第一行两个整数 n 和 k,分别表示学生数和队伍数。
接下来 n 行,每行一个整数 和一个大写字母 ,表示第 i 个选手的理论分数和队伍编号。保证队伍编号范围是从 A 开始后连续 k 个字母中的一个。
接下来 k 行,每行 k 个整数。其中第 i 行第 j 列的整数 表示第 i 个队伍给第 j 个队伍的评分,当 i=j 时,就是自评。
输出格式
输出 n 行表示答案,得分高的同学优先输出,得分相同时队伍编号较小的同学优先输出。对于每一行,先输出这位同学成绩,然后输出代表他的队伍编号的大写英文字母。
思路
定义一个学生类,包含理论分数、团队代号、最终分数三个属性,自定义排序规则将其按照题目要求排序,然后根据题目进行模拟即可。
根据题目输入数据,然后求每个队伍代号的平均值,在此遍历每个每个队伍代号的成绩,与平均值比较大于15的舍去,计算新的平均值(四舍五入),然后按照题目要求计算各同学的最终成绩(四舍五入),最后排序输出即可。
题目不难,但一定要细心!
- import java.util.Arrays;
- import java.util.Scanner;
-
- public class ArrayOne {
-
- static class student implements Comparable
{ - public int score;
- public char team;
- public long finalscore;
- public int compareTo(student s) {
- if(this.finalscore>s.finalscore)
- return -1;
- else if(this.finalscore==s.finalscore) {
- if(this.team
- return -1;
- }
- return 1;
- }
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Scanner sc=new Scanner(System.in);
- int n=sc.nextInt();
- int k=sc.nextInt();
- student s[]=new student[n];
- int a[][]=new int[k][k];
- double b[]=new double[k];
- for(int i=0;i
- student s1=new student();
- s1.score=sc.nextInt();
- s1.team=sc.next().charAt(0);
- s[i]=s1;
- }
- for(int i=0;i
- for(int j=0;j
- a[i][j]=sc.nextInt();
- }
- }
- for(int j=0;j
- int sum1=0;
- for(int i=0;i
- sum1+=a[i][j];
- }
- double avg1=sum1*1.0/k;
- int sum2=0;
- int y=0;
- for(int i=0;i
- if(a[i][j]>=avg1-15&&a[i][j]<=avg1+15) {
- sum2+=a[i][j];
- y++;
- }
- }
- double avg2=sum2*1.0/y;
- b[j]=Math.round(avg2);
- }
- for(int i=0;i
- double x1=s[i].score*0.6+b[s[i].team-'A']*0.4;
- s[i].finalscore=Math.round(x1);
- }
- Arrays.sort(s);
- for(int i=0;i
- System.out.println(s[i].finalscore+""+s[i].team);
- }
-
- }
-
- }
-
相关阅读:
【k8s】浅谈对kubernetes基本概念
xilinx reset,data同步
【c++每天一题】跳跃游戏
临界区、临界资源、共享资源、临界调度原则
[软考中级]软件设计师-结构化开发
【ARM 嵌入式 编译系列 11.3 -- GCC attribute packed noreturn constructor 介绍】
Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单
【Git管理工具】使用Docker部署GitLab服务器
腾讯基础面
P1541 [NOIP2010 提高组] 乌龟棋(4维背包问题)
-
原文地址:https://blog.csdn.net/jjlkjjlk/article/details/133612314