666


私信TA

用户名:210054070322

访问量:335

签 名:

等  级
排  名 2249
经  验 2386
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校 郑州商学院
专  业

  自我简介:

解题思路:其实很简单     排序分为三种情况1..总成绩前小于后     2.总成绩相同但语文前小于后   3.总成绩相同语文相同但学号前比后大。
注意事项:

参考代码:

#include

using namespace std;

struct st{

       int xh;//学号

       int a,b,c;三科成绩

       int sum=0;//三科成绩总和

};    

int main(){

       int n;

       cin>>n;

       struct st z[n+5],t;//t为交换排序时的中间变量     注意结构体交换小技巧   用两个结构体直接交换       

       for(int i=1;i<=n;i++){

              cin>>z[i].a>>z[i].b>>z[i].c;

              z[i].sum=z[i].a+z[i].b+z[i].c;//记录总成绩

              z[i].xh=i;                             //记录学号从1开始

       }

     for(int i=1;i<=n-1;i++){

        for(int j=i+1;j<=n;j++){ //1.总成绩前小于后 2.总成绩相同但语文前小于后3.总成绩相同语文相同但学号前比后大

        if(z[i].sum<z[j].sum||(z[i].sum==z[j].sum&&z[i].a<z[j].a)||((z[i].sum==z[j].sum&&z[i].a==z[j].a)&&(z[i].xh>z[j].xh))){

            t=z[i];   //上面红色这段代码我觉得没有必要加上,因为输入的时候就已经按学号从小到大顺序排列了,就不可能出现前面的比后面的大。

            z[i]=z[j];

            z[j]=t;       //结构体间直接交换 

               }

              }

       }

       for(int i=1;i<=5;i++){

              cout<<z[i].xh<<' '<<z[i].sum<<endl;

       }

       return 0;

}


 

0.0分

3 人评分

  评论区

  • «
  • »