poj 1527 Making the Grade

本来说考试前再刷题剁手!结果算法老师布置的作业就是刷题。。。

坑爹的是问室友题号时,他还说错了一个,把1521说成了1527

虽然他后来又告诉我了,但我想写都写了,也不是很难,就接着写吧

结果我就做了这个超恶心的模拟题

先说下恶心人的题意:

输入S个学生,每个学生参加T次考试,且输入每个考生的奖励次数及缺勤次数

对每个学生而言,如果T>2,就取除最差成绩以外的所有成绩的平均成绩

奖励分数为奖励次数/2×3!注意要用整型!最终成绩=平均成绩+奖励分数

所有学生平均成绩为mean,方差为sd!

如果最终成绩>mean+sd:评分为A

否则如果最终成绩>mean      :评分为B

否则如果最终成绩>mean-sd:评分为C

否则:评分为D

缺勤次数每四次降一级(不能低于F),如果未缺勤则升一级(不能高于A)

最后求所有学生的平均绩点!

A代表4分

B代表3分

C代表2分

D代表1分

F代表0分


代码如下(可给我恶心够了):

#include <cmath>
#include <cstdio>
#include <iostream>
#include <algorithm>
#define MAXN 50
#define ll long long
using namespace std;

float avg[MAXN];
float adj[MAXN];
int absence[MAXN];

int main(void) {
    int N, S, T;
    int flag = 1;
    float mean, sd;
    int bouns, test;
    int mingrade;
    int sum;

    scanf("%d", &N);
    while(N--) {
        scanf("%d%d", &S, &T);
    
        mean = 0.0;
        sd = 0.0;

        for(int i=0; i<S; ++i) {
            mingrade = 101;
            sum = 0;

            for(int j=0; j<T; ++j) {
                scanf("%d", &test);
                sum += test;
                mingrade = min(mingrade, test);
            }
            
            if(T > 2) {
                sum -= mingrade;
                avg[i] = (float(sum/(T-1)));
            }
            else avg[i] = (float)(sum/T);
         
            mean += avg[i];
            scanf("%d", &bouns);
            scanf("%d", &absence[i]);
            

            adj[i] = avg[i]+bouns/2*3;

//           printf("avg[%d] = %.1f\t", i+1, avg[i]);
//           printf("adj[%d] = %.1f\n", i+1, adj[i]);
        }
        
        mean /= S;
        for(int i=0; i<S; ++i) {
            sd += (avg[i]-mean)*(avg[i]-mean);
        }
        sd = sqrt(sd/S);

        float ssum = 0.0;
        for(int i=0; i<S; ++i) {
            int x = absence[i]/4;
          //  printf("i=%d \t x=%d\n", i, x);
            if(adj[i] >= mean+sd) {
                ssum += 4;
                if(x <= 4)
                    ssum -= x;
                else ssum -= 4;
            }
            else if(adj[i] >= mean) {
                ssum += 3;
                if(x <= 3)
                    ssum -= x;
                else ssum -= 3;
            }
            else if(adj[i] >= mean-sd) { 
                ssum += 2;
                if(x <= 2)
                    ssum -= x;
                else ssum -= 2;
            }
            else if(adj[i] >= 0){
                ssum += 1;
                if(x)
                    ssum -= 1;
            }
            if(absence[i]==0 && adj[i]<mean+sd)
                ssum += 1;

        }
        ssum /= S;
        /*
        printf("ssum = %.1f\n", ssum);
        printf("sd = %.1f\n", sd);
        printf("mean = %.1f\n", mean);
        */
        if(flag) {
            printf("MAKING THE GRADE OUTPUT\n");
            flag = 0;
        }
        printf("%.1f\n", ssum);
        if(N == 0)
            printf("END OF OUTPUT\n");
    }
    return 0;
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值