phrym @ 2023-09-23 20:09:46
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
struct student {
int p;
int ch;
int ma;
int en;
int sum;
};
student s[301];
int n;
int compsum(const student& a, const student& b)
{
return a.sum > b.sum;
}
int main(void) {
cin >> n;
for (int i = 1; i <= n; i++) {
s[i].p = i;
cin >> s[i].ch >> s[i].ma >> s[i].en;
s[i].sum = s[i].ch + s[i].ma + s[i].en;
}
sort(s + 1, s + n + 1, compsum);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
if ((s[i].sum == s[i + 1].sum) && (s[i].ch < s[i + 1].ch)) swap(s[i], s[i + 1]); break;
if ((s[i].sum == s[i + 1].sum) && (s[i].ch == s[i + 1].ch) && (s[i].p < s[i + 1].p)) swap(s[i], s[i + 1]); break;
}
}
for (int i = 1; i <= 5; i++) {
cout << s[i].p << " " << s[i].sum << endl;
}
return 0;
}
by WangYinxiAlex @ 2023-09-29 10:01:17
为啥你的代码这么长???
#include<iostream>
using namespace std;
int a[301][5],sum[301];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i][1]>>a[i][2]>>a[i][3];
a[i][4]=i;
}
for(int i=1;i<=n;i++){
sum[i]=a[i][1]+a[i][2]+a[i][3];
}//求出总分
for(int i=1;i<=n;i++){
for(int j=(i+1);j<=n;j++){
if(sum[i]<sum[j]){
swap(a[i][1],a[j][1]);
swap(a[i][2],a[j][2]);
swap(a[i][3],a[j][3]);
swap(a[i][4],a[j][4]);
swap(sum[i],sum[j]);
}//判断大小
if(sum[i]==sum[j]){
if(a[i][1]<a[j][1]){
swap(a[i][1],a[j][1]);
swap(a[i][2],a[j][2]);
swap(a[i][3],a[j][3]);
swap(a[i][4],a[j][4]);
swap(sum[i],sum[j]);
}
}//判断相等的特殊情况
}
}
for(int i=1;i<=5;i++){
cout<<a[i][4]<<" "<<sum[i]<<endl;
}//输出
return 0;
}
简单了事。
by Miracle1024 @ 2023-10-02 10:06:39
@潘寒
这道题可以不用手写排序。
可以在 cmp
函数里写好整体的比较代码。
by Miracle1024 @ 2023-10-02 10:30:46
找到问题所在了。
为了解释这个问题,首先写这样一段代码:
#include<iostream>
using namespace std;
int main(){
int a;
cin>>a;
if(a%2==1)cout<<3;cout<<a<<endl;
cout<<0<<endl;
return 0;
}
按照预期,这段代码会在输入奇数时输出3和这个奇数,然后换行,输出 0
。
输入偶数时,则会直接输出 0
。
但是当我们输入 4
,会得到这样的输出:
4
0
可以看到, 4
本身也被输出了。
这是因为虽然我们把 语句cout<<a<<endl;
放在 if
语句后面,但是在不加大括号的情况下,if
语句只会管紧接着的一条语句。也就是说,无论 if
的条件是否达成,cout<<a<<endl;
都会被运行。
同理,在你的代码里,第 31
行、第 32
行的 break
语句虽然在 if
后,但它们是 if
后的第二条语句,在没有大括号的情况下,无论 if
的条件是否达成,这两条语句都会被运行。
所以应该在第 31
行、第 32
行的 if
语句后加大括号
by Miracle1024 @ 2023-10-02 10:35:12
嗯,才发现刚刚的分析并没有从根本上解决问题。
@潘寒 可以给我讲讲你的代码思路吗,我没特别懂内层循环的意义
by phrym @ 2023-10-07 16:44:30
@WangYinxiAlex 用二维数组存储确实没想到(哭死)多数据我一直用的结构体和类存储的,谢谢了
by phrym @ 2023-10-07 16:52:56
@yee1024pi就是说用结构体存储每个同学的成绩,然后按总分进行排序,循环是为了找出总分相同的情况(那个j那层循环是我多打了(哭了))然后最后就是按要求排好序的了,然后再输出前五名(但我用那个数据测试是对的?)
by WangYinxiAlex @ 2023-10-14 08:20:18
@潘寒 不用谢,本蒟蒻若能帮到您真是太好了(大大大客套话)
by WangYinxiAlex @ 2024-01-14 11:04:11
@phrym 等等,潘寒?《三体》里面的那个?
by phrym @ 2024-01-23 20:09:16
@WangYinxiAlex 大概率不是的
by wangqicheng1637 @ 2024-03-15 18:04:08
至于吗? 不就一个cmp一个struct,两个for吗?