中级守护
题目链接: 酷町堂:4470
4470 成绩统计(score)
经验值:400 时间限制:1000毫秒 内存限制:128MB
合肥市第36届信息学竞赛(2019年)
不许抄袭,一旦发现,直接清空经验!
题目描述 Description
合肥市某学校某年级共有 m 个班,每个班级都有 n 位学生。某次考试结束后,知道了每位学生的总分(整数),现在还要再统计一些数据:
1)每个班级的最高得分
2)每个班级的平均得分(四舍五入,保留一位小数)
3)所有学生总分低于一个分值 p 的人数和高于一个分值 q 的人数。
输入描述 Input Description
输入数据共 m+1 行。第一行是 4 个由空格分隔的正整数 m、n、p、q,接下来 m 行,每行共有 n 个由空格分隔的正整数,表示每一位学生的总分
输出描述 Output Description
共 3 行,第一行 m 个由空格分隔的正整数,对应每个班级的最高分;第二行 m 个由空格分隔的数值,对应每个班级的平均分;第三行 2 个由空格分隔的正整数,分别表示低于 p 的人数和高于 q 的人数。
样例输入 Sample Input
3 4 150 290 260 300 140 190 290 280 260 270 190 280 300 190
样例输出 Sample Output
300 290 300 222.5 275.0 240.0 1 2
数据范围及提示 Data Size & Hint
数据范围:
1≤m,n≤100 0≤每个学生总分≤300
#include<bits/stdc++.h>
using namespace std;
int main()
{
int m,n,p,q,i,j,a[101][101],ans1[101],ans3=0,ans4=0;
double ans2[101];
cin>>m>>n>>p>>q;
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
cin>>a[i][j];
ans1[i]=max(ans1[i],a[i][j]);
ans2[i]+=a[i][j];
if(a[i][j]<p) ans3++;
if(a[i][j]>q) ans4++;
}
}
for(i=1;i<=m;i++) cout<<ans1[i]<<' ';
cout<<endl;
for(i=1;i<=m;i++) cout<<setprecision(1)<<fixed<<ans2[i]/n<<' ';
cout<<endl<<ans3<<' '<<ans4;
return 0;
}
哪错了??
只有80分??
初级启示者
printf不是四舍五入的
用:
printf("%.1f ",int(x+0.5)/10.0);
(x为需要四舍五入的数字,浮点型)
新手守护
双引号里数字根据保留位数改变。
printf("%.2f",ans1);(保留两位小数)
printf("%.1f",ans1);(保留一位小数)
printf("%.0f",ans1);(保留零位小数,用来四舍五入)