70分求助

P1093 [NOIP2007 普及组] 奖学金

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 废了,谢谢大佬


|