这个除了输出都没问题,输出怎么改?

img

img


我知道输出的时候要查找出和最大值相同的人输出,但不知道怎么改……

应该是需要将最高分有相同的也判断下,另外平均分如果出现小数,估计也需要将平均分的类型改为浮点数类型。

初步修改如下:


#include <bits/stdc++.h>
using namespace std;

struct chj{
    char name[10];
    int zh,mo,q;
}a[100];

int main(void){
    
    int n,x=0,v;
    cin>>n;
    
    for(int i=0;i<n;i++){
        cin>>a[i].q>>a[i].name>>a[i].zh>>a[i].mo;
    }
    
    for(int i=0;i<n;i++){
        if((a[i].zh+a[i].mo)/2>x){
            x=(a[i].zh+a[i].mo)/2;
            v=i;
        }
    }
    
    // 计算最高分数 
    int max = a[v].zh+a[v].mo;
    
    // 再次遍历学生结构数组,如果存在多个相同最高分,则将这些学生的信息都输出 
    for(int i=0;i<n;i++){
        
        if(max==(a[i].zh+a[i].mo)){
            cout<<a[i].q<<" "<<a[i].name<<" "<<a[i].zh<<" "<<a[i].mo<<endl;
        }
        
    }
    
    return 0;
}

 

img

我仅会点点python,用python代码“描述”下我的处理方式,希望对您有帮助。

  • 一、以行折分输入字符串,记录综合成绩最的行索引,最后输出。

    img

#!/sur/bin/nve python
# coding: utf-8

def strong(in_s: str) -> str:
    in_s = in_s.split('\n') # 以行拆分数据。
    n = int(in_s[0])
    scores = in_s[1:]
    strong = 0
    k = ''
    
    for i in range(n):
        ii = scores[i].split()
        score = int(ii[-1]) + int(ii[-2]) # 由于不要求输出综合平均分,仅比较总分就好。
        
        if score > strong:
            strong = score
            k = i # 记录最好成绩索引。

    return scores[k]



if __name__ == '__main__':
    in_s = '''3
1 zhangfang 98 96
2 liming 100 90
3 sunhua 99 93'''
    print(f"\n输入:\n{in_s}\n\n输出:\n{strong(in_s)}") 

  • 二、拆分成行列表,按综合成绩排序,输出高的综合成绩。

    img

  • 按综合总分排序方式


def strong(in_s: str) -> str:
    scores = in_s.split('\n')[1:]
    scores.sort(key=lambda x: int(x.split()[-1]) + int(x.split()[-2]))
    return scores[-1]


对成绩进行排序,从数组索引0开始比较,每次比较后,保存成绩较大值的索引,一直比到数组索引99,即可得到成绩最大值数组的索引值,这个是最简单的方法

【以下回答由 GPT 生成】

要修改代码以得到你想要的输出结果,你可以按照以下步骤进行修改:

  1. 首先,你需要创建一个新的结构体来存储学生的信息,包括ID、姓名、综合成绩和排名。修改代码如下:
struct Student {
    int rank;
    int id;
    char name[10];
    int zh;
    int mo;
};
  1. 接下来,在输入学生信息时,为每个学生设置一个默认的排名1。修改代码如下:
for (int i = 0; i < n; i++)
    cin >> a[i].id >> a[i].name >> a[i].zh >> a[i].mo;
  1. 然后,你需要计算每个学生的综合成绩和排名。修改代码如下:
for (int i = 0; i < n; i++) {
    a[i].q = i + 1;
    a[i].rank = 1;
    for (int j = 0; j < n; j++) {
        if ((a[i].zh + a[i].mo) / 2 < (a[j].zh + a[j].mo) / 2)
            a[i].rank++;
    }
}
  1. 最后,在输出结果时,按照排名的顺序输出学生的信息。修改代码如下:
cout << "排名   ID          姓名     综合成绩" << endl;
for (int i = 0; i < n; i++) {
    cout << a[i].rank << "     " << a[i].id << "     " << a[i].name << "     " << a[i].zh << "       " << a[i].mo << endl;
}

现在,你可以尝试运行修改后的代码,应该能够得到你想要的输出结果。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

两个问题:

  1. 相等情况;
  2. 小数处理。