本来说考试前再刷题剁手!结果算法老师布置的作业就是刷题。。。
坑爹的是问室友题号时,他还说错了一个,把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;
}