B. Problem B.卷王(study.cpp)
内存限制:256 MiB
时间限制:1000 ms
标准输入输出
题目类型:传统
评测方式:文本比较
题目描述:
在某个群里,有一个卷王,他很关心群友的学习成绩。
他扬言如果群友不上缴成绩单,他就在暑假每天在群里催促群友学习。
于是他成功地拿来了群友的成绩单,打算研究群友到底学得怎么样。
但他卷累了,所以他要求你算出来群友的平均分,不然就每天私聊催促你学习。
成绩单上写了群友所学的所有 n 门课程,每门课程的成绩分别是 gi。
如果一门课的成绩 gi 大于等于 60 分,那么群友通过了这门课,这门课会计入总成绩。
否则他就挂科了,相当于没有学过这门课,所以这门课也不会计入平均成绩的计算。
特别的,如果群友没有不挂科的课程,那么他的平均分是 0。
输入格式:
第一行一个整数 n,表示课程数目。
第二行个非负整数 n,gi表示第i门课程的成绩
输出格式:
一行一个浮点数,表示群友的平均分,四舍五入到三位小数。
样例:
【样例 1 输入】
4
55 66 77 88
【样例 1 输出】
77.000
【样例 2 输入】
4
55 44 33 22
【样例 2 输出】
0.000
第一个样例中,群友一共学了4门课程,其中有一门55分的课程挂科了,不计入成绩。
剩下门课程3,平均分是(66+77+88)/3=77,保留三位小数输出为77.000。
第二个样例中群友所有课都挂了,所以平均分是0,但也要按照三位小数输出。
数据范围与提示:
对于20%的数据,n=0。
对于40%前的数据,n<=1。
对于另外20%的数据,gi>=60。
对于另外20%的数据,保证答案是整数。
对于100%的数据,0<=n<=10^3,0<=gi<=100。
思路:
我们简单说一下思路,首先定义两个计数器,都初始化为0,一个代表挂科的数目,另一个存的是所有没有挂科科目的总分(最后用来求平均数的)。
进行一次遍历,如果gi<60,那么第一个计数器加上1,否则的话第二个计数器加上gi,遍历玩过后,我们进行判断,如果第一个计数器和学科总数相等,那么说明他所有学科都挂科了,平均数为0,直接输出0.000.
之后我们利用printf("%.3lf",……).来输出平均数,省略的部分就是我们要输出的平均数,我们知道,这个学生有1号计数器个学科挂科,那么没有挂科的数量就为学科总数-1号计数器,之后利用2号计数器除以没有挂科的学科的总数,输出过后,就是平均数了!
代码:
#include<bits/stdc++.h> //万能头文件
using namespace std; //批准使用std类
int main(){ //main主函数
int n,sum=0,vum=0,x=0; //定义
cin>>n; //输入
x=n; //赋值
float a; //d定义
while(n--){
int g; //定义gi
cin>>g; //输入gi
if(g<60) //是不是挂科
sum++; //1号计数器+1
else //不是挂科
vum+=g; //分数统计
}
if(sum==x) //如果全部都挂科了
cout<<"0.000"<<endl; //输出三位小数0.000
else //如果有没有挂科的科目
printf("%.3f",(float)vum/(float)(x-sum)); //求出平均分并输出
return 0; //结束
}
总结:
这道题很简单,很简单!简单到我认为他都应该编入白银组第一,二题的,仅仅只需要学生学会计数就行了!为什么会在钻石组里面呢?还是钻石组的第二题?
题目链接:
登录 - 梦熊联盟http://mna.wang/contest/52/problem/2