问题标题: 酷町堂:5517啊啊啊

1
0
已解决
邵悦媛
邵悦媛
新手光能
新手光能

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;
}

不对不对!!!速答!!每日一题!!!


2
已采纳
丁博扬
丁博扬
中级天翼
中级天翼
  • 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追加了内容

打字不易,望采纳

0
杜智宸
杜智宸
中级光能
中级光能

准考证号字符串,你有认真看题吗

杜智宸在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

比较一下他们的平均分,然后再输出

0
张恩泽
张恩泽
高级天翼
高级天翼

你这题没用结构体排序!!

 

这一题不需要比较他们的平均分,算一下总分再排序就可以了

结构体定义:

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

 

 

0
张恩泽
张恩泽
高级天翼
高级天翼
  for (int i = 1; i <= n; i ++) {
        cout << a[i].name << endl;
    }

这样输出

我要回答