应该是需要将最高分有相同的也判断下,另外平均分如果出现小数,估计也需要将平均分的类型改为浮点数类型。
初步修改如下:
#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;
}
我仅会点点python,用python代码“描述”下我的处理方式,希望对您有帮助。
#!/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)}")
二、拆分成行列表,按综合成绩排序,输出高的综合成绩。
按综合总分排序方式
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 生成】
要修改代码以得到你想要的输出结果,你可以按照以下步骤进行修改:
struct Student {
int rank;
int id;
char name[10];
int zh;
int mo;
};
for (int i = 0; i < n; i++)
cin >> a[i].id >> a[i].name >> a[i].zh >> a[i].mo;
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++;
}
}
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;
}
现在,你可以尝试运行修改后的代码,应该能够得到你想要的输出结果。
【相关推荐】
两个问题: