• 传智杯第二届javaB组例题


    题目

    某大学的《软件工程》必修课分为理论和实践部分。理论部分由该校教授完成授课;而实践部分是由第三方的公司主导,需要同学们在五周时间内自学 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的舍去,计算新的平均值(四舍五入),然后按照题目要求计算各同学的最终成绩(四舍五入),最后排序输出即可。
    题目不难,但一定要细心!

    代码

    1. import java.util.Arrays;
    2. import java.util.Scanner;
    3. public class ArrayOne {
    4. static class student implements Comparable{
    5. public int score;
    6. public char team;
    7. public long finalscore;
    8. public int compareTo(student s) {
    9. if(this.finalscore>s.finalscore)
    10. return -1;
    11. else if(this.finalscore==s.finalscore) {
    12. if(this.team
    13. return -1;
    14. }
    15. return 1;
    16. }
    17. }
    18. public static void main(String[] args) {
    19. // TODO Auto-generated method stub
    20. Scanner sc=new Scanner(System.in);
    21. int n=sc.nextInt();
    22. int k=sc.nextInt();
    23. student s[]=new student[n];
    24. int a[][]=new int[k][k];
    25. double b[]=new double[k];
    26. for(int i=0;i
    27. student s1=new student();
    28. s1.score=sc.nextInt();
    29. s1.team=sc.next().charAt(0);
    30. s[i]=s1;
    31. }
    32. for(int i=0;i
    33. for(int j=0;j
    34. a[i][j]=sc.nextInt();
    35. }
    36. }
    37. for(int j=0;j
    38. int sum1=0;
    39. for(int i=0;i
    40. sum1+=a[i][j];
    41. }
    42. double avg1=sum1*1.0/k;
    43. int sum2=0;
    44. int y=0;
    45. for(int i=0;i
    46. if(a[i][j]>=avg1-15&&a[i][j]<=avg1+15) {
    47. sum2+=a[i][j];
    48. y++;
    49. }
    50. }
    51. double avg2=sum2*1.0/y;
    52. b[j]=Math.round(avg2);
    53. }
    54. for(int i=0;i
    55. double x1=s[i].score*0.6+b[s[i].team-'A']*0.4;
    56. s[i].finalscore=Math.round(x1);
    57. }
    58. Arrays.sort(s);
    59. for(int i=0;i
    60. System.out.println(s[i].finalscore+""+s[i].team);
    61. }
    62. }
    63. }

  • 相关阅读:
    【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