解题思路:其实很简单 排序分为三种情况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 人评分
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:590 |
简单的a+b (C语言代码)浏览:544 |
上车人数 (C语言代码)浏览:781 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:512 |
Pascal三角 (C语言代码)浏览:1189 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:1293 |
WU-格式化数据输出 (C++代码)浏览:1212 |
A+B for Input-Output Practice (C语言代码)浏览:468 |
DNA (C语言代码)浏览:750 |
第三届阿里中间件性能挑战赛-总决赛亚军比赛攻略浏览:1145 |