AxolotlQAQ @ 2023-09-02 21:46:05
#include<bits/stdc++.h>
using namespace std;
int a[1005],b[1005],c[1005],d[1005],e[1005];
bool g[1005]={0};
bool cmp(int a,int b)
{
return a>b;
}
int main() {
int n;
cin>>n;
for(int i=0; i<n; i++) {
cin>>a[i]>>b[i]>>c[i];
e[i]=a[i]+b[i]+c[i];
d[i]=i+1;
}
for(int i=0;i<n;i++){
for(int j=i;j<n;j++){
if(e[i]<e[j]){
swap(e[i],e[j]);
swap(d[i],d[j]);
}
if(e[i]==e[j]){
if(d[i]>d[j]){
swap(e[i],e[j]);
swap(d[i],d[j]);
}
}
}
}
for(int i=0;i<5;i++){
cout<<d[i]<<" ";
cout<<e[i]<<endl;
}
return 0;
}
by Sqj147 @ 2023-09-05 22:18:27
先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面
by Sqj147 @ 2023-09-05 22:27:02
#include <bits/stdc++.h>
using namespace std;
int a[1005], b[1005], c[1005], d[1005], e[1005];
bool g[1005] = {0};
bool cmp(int a, int b) {
return a > b;
}
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i] >> b[i] >> c[i];
e[i] = a[i] + b[i] + c[i]; // 总分
d[i] = i + 1; // 序号
}
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
if (e[i] < e[j]) { // 总分小
swap(e[i], e[j]);
swap(d[i], d[j]);
swap(a[i], a[j]);
}
if (e[i] == e[j]) { // 总分同
if (a[i] < a[j]) { // 语文小
swap(e[i], e[j]);
swap(d[i], d[j]);
swap(a[i], a[j]);
}
if (a[i] == a[j]) { // 语文同
if (d[i] > d[j]) { // 序号大
swap(e[i], e[j]);
swap(d[i], d[j]);
swap(a[i], a[j]);
} // 为什么每次交换总分、序号、语文,因为后续可能会用到这三个数据,把这三个对应在一个位次,防止影响后续结果
}
}
}
}
for (int i = 0; i < 5; i++) {
cout << d[i] << " ";
cout << e[i] << "\n";
}
system("pause");
return 0;
}
by AxolotlQAQ @ 2023-09-13 12:35:22
@Sqj147 废了,谢谢大佬