zoukankan      html  css  js  c++  java
  • PAT 乙级 1077 互评成绩计算 (20)

    在浙大的计算机专业课中,经常有互评分组报告这个环节。一个组上台介绍自己的工作,其他组在台下为其表现评分。最后这个组的互评成绩是这样计算的:所有其他组的评分中,去掉一个最高分和一个最低分,剩下的分数取平均分记为 G1;老师给这个组的评分记为 G2。该组得分为 (G1+G2)/2,最后结果四舍五入后保留整数分。本题就要求你写个程序帮助老师计算每个组的互评成绩。

    输入格式:

    输入第一行给出两个正整数N(> 3)和M,分别是分组数和满分,均不超过100。随后N行,每行给出该组得到的N个分数(均保证为整型范围内的整数),其中第1个是老师给出的评分,后面 N-1 个是其他组给的评分。合法的输入应该是[0, M]区间内的整数,若不在合法区间内,则该分数须被忽略。题目保证老师的评分都是合法的,并且每个组至少会有3个来自同学的合法评分。

    输出格式:

    为每个组输出其最终得分。每个得分占一行。

    输入样例:

    6 50
    42 49 49 35 38 41
    36 51 50 28 -1 30
    40 36 41 33 47 49
    30 250 -25 27 45 31
    48 0 0 50 50 1234
    43 41 36 29 42 29
    

    输出样例:

    42
    33
    41
    31
    37
    39

     1 #include<iostream>
     2 
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int n, full_grade;
     8 
     9     cin >> n >> full_grade;
    10 
    11     int* p = new int[n*n];
    12     int *min = new int[n];//最小成绩的下标
    13     int *max = new int[n];//最大成绩的下标
    14     int *grade = new int[n];//计算学生合法成绩总和
    15     int *num = new int[n];//合法成绩数
    16 
    17     for (int i = 0; i < n; ++i)
    18     {
    19         num[i] = -3;//老师输入合法但不包括,最大最小不包括
    20         grade[i] = 0;
    21     }
    22 
    23     for (int i = 0; i < n; ++i)
    24     {
    25         int Min = INT_MAX, Max = INT_MIN;
    26 
    27         for (int j = 0; j < n; ++j)
    28         {
    29             cin >> *(p + n*i + j);
    30 
    31             if (*(p + n*i + j) <= full_grade && *(p + n*i + j) >= 0)//输入合法
    32             {
    33                 if (*(p + n*i + j) > Max && j)//得到最大值
    34                 {
    35                     max[i] = j;
    36                     Max = *(p + n*i + j);
    37                 }
    38 
    39                 if (*(p + n*i + j) < Min && j)//得到最小值
    40                 {
    41                     min[i] = j;
    42                     Min = *(p + n*i + j);
    43                 }
    44 
    45                 num[i]++;//累加合法个数
    46             }
    47             else
    48                 *(p + n*i + j) = 0;//方便计算,省去后续继续判断越界
    49         }
    50     }
    51 
    52     for (int i = 0; i < n; ++i)
    53     {
    54         for (int j = 1; j < n; ++j)
    55             if (j != min[i] && j != max[i])
    56                 grade[i] += *(p + n*i + j);
    57         
    58         cout << (int)(((grade[i] / num[i]) + (*(p + n*i))) / 2.0 + 0.5) << endl;;
    59     }
    60 
    61     delete[] p;
    62     delete[] min;
    63     delete[] max;
    64     delete[] grade;
    65     delete[] num;
    66     return 0;
    67 }
  • 相关阅读:
    简单理解ThreadLocal原理和适用场景
    Portal实现原理
    Spring cloud微服务实战——基于OAUTH2.0统一认证授权的微服务基础架构
    Java8中 Date和LocalDateTime的相互转换
    sonar rule
    图论篇2——最小生成树算法(kurskal算法&prim算法)
    图论篇1——图的基本概念
    数论篇6——欧拉函数
    数论篇5——数论四大定理
    数论篇4——逆元(数论倒数)
  • 原文地址:https://www.cnblogs.com/cdp1591652208/p/8191497.html
Copyright © 2011-2022 走看看