题目描述
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。
如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。
请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整 数。
输入描述
输入的第一行包含一个整数 � (1≤�≤104)n (1≤n≤104),表示考试人数。
接下来 �n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。
输出描述
输出两行,每行一个百分数,分别表示及格率和优秀率。百分号前的部分 四舍五入保留整数。
输入输出样例
示例
输入
7
80
92
56
74
88
100
0
输出
71%
43%
我的做法:
#include <iostream>
using namespace std;
int mark[10000];
int main()
{
int num;
int a,b;
a=b=0;
double r;
cin>>num;
for(int i=0;i<num;i++){
cin>>mark[i];
if(mark[i]>=85) b++;
if(mark[i]>=60) a++;
}
r=(double)a/num;
a=(int)(r*1000);
if((a%10)>=5) a=a+10;
a=a/10;
printf("%d%%\n",a);
r=(double)b/num;
b=(int)(r*1000);
if((b%10)>=5) b=b+10;
b=b/10;
printf("%d%%",b);
return 0;
}
典型做法:
#include <iostream>
#include<math.h>
using namespace std;
int main()
{
int num;
int t;
int a,b;
a=b=0;
double r;
cin>>num;
for(int i=0;i<num;i++){
cin>>t;
if(t>=85) b++;
if(t>=60) a++;
}
a=a*100;
b=b*100;
r=a/(double)num;
r=round(r);
printf("%d%%\n",int(r));
r=b/(double)num;
r=round(r);
printf("%d%%\n",int(r));
return 0;
}
总结:
不用再开数组存放成绩,浪费空间
四舍五入的方法:
(1)保留到整数:
(a)利用数学知识:
float f;
int i=(int)(f+0.5)
(b)利用库函数round:
double round(double x);
(2)一般情况:
float f;
f=int(f*1000+0.5)/1000.0;