70求调

P1093 [NOIP2007 普及组] 奖学金

wangyifan090531 @ 2023-04-27 18:37:10

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int num[10000]={},cnn[1000]={},math[1000]={},eng[1000]={},all[100000]={};
    int n=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>cnn[i]>>math[i]>>eng[i];
        all[i]=cnn[i]+math[i]+eng[i];
        num[i]=i;
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=i;j<=n;j++)
        {
            if(all[i]<all[j])
            {
                swap(all[i],all[j]);
                swap(num[i],num[j]);
            }
            else if(all[i]==all[j])
            {
                if(cnn[i]<cnn[j])
                {
                    swap(all[i],all[j]);
                    swap(num[i],num[j]);
                }
                else if(num[i]>num[j])
                {
                    swap(all[i],all[j]);
                    swap(num[i],num[j]);
                }
            }
        }
    }

    for(int i=1;i<=4;i++)
    {
        cout<<num[i]<<" "<<all[i]<<endl;
    }
    cout<<num[5]<<" "<<all[5];
}

by BianChengHu @ 2023-04-27 18:48:11

正解:

#include<bits/stdc++.h>
using namespace std;
struct node{
    int id,ma,ch,en,an;
}stu[305];
int n;
bool cmp(node x,node y){
    if(x.an!=y.an){
        return x.an>y.an;
    }
    if(x.ch!=y.ch){
        return x.ch>y.ch;
    }
    return x.id<y.id;
}
int main(){
    cin>>n;
    for(int i = 1; i <= n; i++){
        cin>>stu[i].ch>>stu[i].ma>>stu[i].en;
        stu[i].id=i;
        stu[i].an=stu[i].ch+stu[i].ma+stu[i].en;
    }
    sort(stu+1,stu+n+1,cmp);
    for(int i = 1; i <= 5; i++){
        cout<<stu[i].id<<" "<<stu[i].an<<endl;
    }
    return 0;
}

by CBC18 @ 2023-06-24 09:57:44

我这还有个歪解:

#include<bits/stdc++.h>
using namespace std;
int n,num[305],chi[305],mat[305],eng[305],sum[305];
signed main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>chi[i]>>mat[i]>>eng[i];
        num[i]=i;
        sum[i]=chi[i]+mat[i]+eng[i];
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n-1;j++){
            if(sum[j]<sum[j+1]){
                swap(sum[j],sum[j+1]);
                swap(chi[j],chi[j+1]);
                swap(mat[j],mat[j+1]);
                swap(eng[j],eng[j+1]);
                swap(num[j],num[j+1]);
            }else if(sum[j]==sum[j+1]){
                if(chi[j]<chi[j+1]){
                    swap(sum[j],sum[j+1]);
                    swap(chi[j],chi[j+1]);
                    swap(mat[j],mat[j+1]);
                    swap(eng[j],eng[j+1]);
                    swap(num[j],num[j+1]);
                }else if(chi[j]==chi[j+1]){
                    if(num[j]>num[j+1]){
                        swap(sum[j],sum[j+1]);
                        swap(chi[j],chi[j+1]);
                        swap(mat[j],mat[j+1]);
                        swap(eng[j],eng[j+1]);
                        swap(num[j],num[j+1]);
                    }
                }
            }
        }
    }
    for(int i=1;i<=min(n,5);i++){
        cout<<num[i]<<' '<<sum[i]<<"\n";
    }
    return 0;
}

手打冒泡排序,一样能A。


|