帮我改改答辩代码呗
2024-07-05 17:09:14
发布于:湖北
53阅读
0回复
0点赞
byd
time=int(input())
paihang=[]
jieguo=[]
bf=[]
for i in range(time):
value=input()
value=value.split(' ')
paihang.append(value)
bf.append(value)
for i in paihang:
i.pop(0)
new=0
for j in i:
i[new]=int(j)
new+=1
jieguo.append(sum(i))
print(bf)
for i in range(time):
best=max(jieguo)
jieguo.remove(max(jieguo))
for j in bf:
print(j)
if int(bf[1])+int(bf[2])+int(bf[3])==best:
print(j[0]+' '+str(best))
全部评论 2
你这个代码逻辑有很大的问题,你按照下面的尝试改一下(Generated by ChatGP):
- 处理输入数据时的重复操作:代码先将选手信息存储在
paihang
列表中,然后再将相同的数据存储在bf
列表中,重复操作没有必要。 - 计算总奖牌数的逻辑有误:代码使用
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
有帮助,赞一个