全部评论 2

  • 你这个代码逻辑有很大的问题,你按照下面的尝试改一下(Generated by ChatGP):

    1. 处理输入数据时的重复操作:代码先将选手信息存储在 paihang 列表中,然后再将相同的数据存储在 bf 列表中,重复操作没有必要。
    2. 计算总奖牌数的逻辑有误:代码使用 i.pop(0) 移除了选手的名字后,直接将剩下的数值转为整数并求和,但没有保存这些总数。
      3.比较选手总奖牌数的逻辑有误:在最后的比较过程中,直接将字符串相加并与 best 比较,这种比较方式是不对的,因为应该比较所有奖牌的整数和。

    AC 代码参考如下:

    n = int(input())
    participants = []
    
    for i in range(n):
        data = input().split()
        name = data[0]
        gold = int(data[1])
        silver = int(data[2])
        bronze = int(data[3])
        total_medals = gold + silver + bronze
        participants.append((name, total_medals, gold, silver, bronze, i))
    
    # 按照总奖牌数、金牌数、银牌数、输入顺序进行排序
    participants.sort(key=lambda x: (-x[1], -x[2], -x[3], x[5]))
    
    # 输出结果
    for participant in participants:
        print(f"{participant[0]} {participant[1]}")
    

    2024-07-05 来自 浙江

    2
  • #include<bits/stdc++.h>
    using namespace std;
    struct student{
    string name;
    int a,b,c;
    int sum;
    int id;
    };
    student t[100010];
    int n;
    bool cmp(student x,student y){
    if(x.sum != y.sum) return x.sum > y.sum;
    if(x.a != y.a) return x.a > y.a;
    if(x.b != y.b) return x.b > y.b;
    return x.id < y.id;
    }
    int main(){
    cin>>n;
    for(int i = 1;i<= n;i++){
    t[i].id = i;
    cin>>t[i].name>>t[i].a>>t[i].b>>t[i].c;
    t[i].sum = t[i].a+t[i].b+t[i].c;
    }
    sort(t+1,t+n+1,cmp);
    for(int i = 1;i <= n;i++){
    cout<<t[i].name<<" "<<t[i].sum<<endl;
    }
    return 0;
    }

    2025-01-23 来自 广东

    0
首页