修练者
题目描述
期末考试结束了,学校已批改完所有试卷,已知某年级共有 n 位学生和他们对应的成绩。老师们想知道这个年级学生成绩的分布情况,以便下学期更好的开展教学,因此现在需要统计一些数据如下:
1)全校最低分、最高分的成绩及人数;
2)同分最多的成绩和人数,如果相同,依次由低分到高分输出;
3)分值 p 和 q 之间(包含 p 和 q)人数。
请同学们编程帮忙统计吧。
输入格式
输入数据共 3 行:
第一行:一个整数 n,表示学校某年级总人数;
第二行:共有 n 个由空格分隔的正整数,表示每一位学生成绩。
第三行:共有 2 个由空格分隔的正整数 p 和 q。
输出格式
共 4 行:
第一行 :2 个由空格分隔的正整数,对应最低的成绩及人数;
第二行 :2 个由空格分隔的正整数,对应最高的成绩及人数;
第三行:多个由空格分隔的正整数,对应多个相同分数最多的成绩及人数。
第 4 行 :1 个正整数,对应成绩 p 和 q 之间人数。
输入输出样列
输入样例1:
11 80 85 80 78 90 95 95 80 98 78 95 85 95
输出样例1:
78 2 98 1 80 3 95 3 5
说明
数据范围:1 ≤ 学生人数 n ≤ 10000,0 ≤ 每个学生成绩 ≤ 500
【耗时限制】1000ms 【内存限制】128MB
缔造者之神
下次问问题记得发个题号
核心:
for(int j=1;j<=n;j++)
{
cin>>a;
maxn=max(maxn,a);
sum+=a;
if(a<p)
{
cnt1++;
}
if(a>q)
{
cnt2++;
}
}
缔造者
for(int i=1;i<=n;i++){ cin>>a[i]; t[a[i]]++; maxn=max(maxn,a[i]); minn=min(minn,a[i]); } cin>>p>>q; for(int i=1;i<=n;i++){ if(a[i]==maxn) maxnn++; if(a[i]==minn) minnn++; } cout<<minn<<" "<<minnn<<"\n"<<maxn<<" "<<maxnn<<"\n"; for(int i=0;i<=500;i++){ if(t[i]>maxi){ maxi=t[i]; } } for(int i=0;i<=500;i++){ if(t[i]==maxi){ cout<<i<<" "<<t[i]<<" "; } } for(int i=0;i<=n;i++){ if(a[i]>=p&&a[i]<=q){ cnt++; } } cout<<"\n"<<cnt;
修练者
哦,对了,输出有换行:
78 2 98 1 80 3 95 3 5
哦,输入也有:
11 80 85 80 78 90 95 95 80 98 78 95 85 95