解题思路:其实很简单 排序分为三种情况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语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:583 |
C语言程序设计教程(第三版)课后习题10.1 (Java代码)浏览:1492 |
完数 (C语言代码)浏览:757 |
蛇行矩阵 (C语言代码)浏览:606 |
1009题解浏览:802 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:524 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:1100 |
模拟计算器 (C++代码)浏览:885 |
钟神赛车 (C语言代码)浏览:665 |
C语言程序设计教程(第三版)课后习题12.3 (C语言代码)浏览:587 |