新手光能
5517 考试成绩统计经验值:800
题目描述 Description
酷町堂举办了一次文件操作模拟赛,共有4道题目,现在要按照4道题目的平均分从高到低排序。如果分数相同,保持在输入中的顺序输出。
要求:求平均分要定义成一个返回值为double类型的结构体函数。
输入描述 Input Description
第一行,一个整数n,表示人数
接下来n行,每行有准考证号、第一题分数、第二题分数、第三题分数、第四题分数,准考证号是一个5位的字符串,由字母和数字构成
输出描述 Output Description
n行,每行一个排序后的准考证号
样例输入 Sample Input
5 BM001 100 0 0 100 BM002 100 20 80 80 BM003 100 100 0 100 BM004 100 100 100 0 BM005 100 100 100 100
样例输出 Sample Output
BM005 BM003 BM004 BM002 BM001
数据范围及提示 Data Size & Hint
n<=1000
怎么做!!!
#include<iostream>
#include<cmath>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
struct ks{
int kh;
int cj[5];
}a[110];
int cnt[1010];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].kh;
for(int j=1;j<=4;j++){
cin>>a[j].cj[i];
cnt[i]+=a[i].cj[j];
}
if(cnt[i]>=cnt[i+1]){
cout<<a[i].kh;
}
}
return 0;
}
不对不对!!!速答!!每日一题!!!
中级天翼
- double sum(){
- return (yi+er+san+si)/4;
- }
- 以上在struct函数里
- 得定义一个string类型的名字,int类型的第一题,第二题,第三题,第四题
- if(x.sum()!=y.sum()){
- return 平均分从大到小//x.sum()>y.sum()
- }
- return 按照顺序排//x.id<y.id
- int main(){
- for循环输入名字第一题,第二题,第三题,第四题
- a[i].id=i;记录下标,按输入顺序输出;
- sort(a+1,a+n+1,cmp);
- for输出名字;
- }
- 记得别往了加头文件
- 我好久没上问答了,求求你,望采纳
丁博扬在2020-10-09 20:03:50追加了内容
- 结构体 chengji{
- 字符串 name;
- 实数 yi,er,san,si;
- 整数 id;
- 实数 sum(){
- 返回 (yi+er+san+si)/4;
- }
- }a[11000];
- 布尔 cmp(chengji x,chengji y){
- 如果(x.sum()!=y.sum()){
- 返回 x.sum()>y.sum();
- }
- 返回 x.id<y.id;
- }
丁博扬在2020-10-09 20:04:19追加了内容
ps:这题我今天刚刷过
丁博扬在2020-10-09 20:05:21追加了内容
打字不易,望采纳
丁博扬在2020-10-09 20:05:26追加了内容
打字不易,望采纳
中级光能
准考证号字符串,你有认真看题吗
杜智宸在2020-10-09 19:02:42追加了内容
数组也定义小了,注意看数据范围
杜智宸在2020-10-09 19:03:57追加了内容
你写一二三四题再比较不香吗,干嘛用数组
杜智宸在2020-10-09 19:07:20追加了内容
平均分double类型
例如:double aa=(cj1+cj2+cj3+cj4)/4.0;
比较用sort,定义一个cmp
比较一下他们的平均分,然后再输出
高级天翼
你这题没用结构体排序!!
这一题不需要比较他们的平均分,算一下总分再排序就可以了
结构体定义:
struct stu {
string name;
int s1, s2, s3, s4;
int pos;
int score;
}a[10010];
你这个a数组定义的太小了,数据范围: n<=10000
所以a数组要开的大一点。
这个score是用来算总分的,pos是用来算输入顺序的
输入:
for (int i = 1; i <= n; i ++) {
cin >> a[i].name >> a[i].s1 >> a[i].s2 >> a[i].s3 >> a[i].s4;
a[i].pos = i; //存输入顺序,以便排序
a[i].score = a[i].s1 + a[i].s2 + a[i].s3 + a[i].s4; //算总分
}
排序就是按照题目规则来拍:
bool cmp (stu x, stu y) {
if (x.score != y.score) {
return x.score > y.score; //按照成绩排序
}
return x.pos < y.pos; //如果成绩相同,就按输入顺序排
}
在main函数里sort一下,最后输出a[i].name即可AC