期末考试结束了,老师需要统计成绩,本学期有语文、数学和英语三门课,老师知道每个同学的三门课程的分数,因为老师实在太忙了,所以老师找到了你,并给出了排序方法:
1.当总分不同时,按总分升序排序
2.当总分相同时,按照语文成绩升序排序
3.同理,当语文成绩相同时按照数学成绩升序排列
4.最后将排序好的数据送给老师即可
聪明的你能否帮老师解决这个问题呢?
第一行输入一个t(t<=20),代表有t组数据,每组数据第一行输入n(n<=50),代表此班级有n位同学,接下来n行,分别输入每位同学的学号和语数英三门成绩(每门成绩均大于等于0,小于等于100)。
按照题目要求,升序输出每位同学的学号和总分按照题目要求,升序输出每位同学的学号和总分---------------解题思路最本质就是考验逻辑思维,思考全面性,审题1--先输入n个同学的语数外成绩2---比较大小,值传递
#include<stdio.h> int main() { int a,b,c,d,k[50],f[50],g[50],h[50]; int i,t,j,sum[50],s,ss,ss1,s1,s2,s3,s4,s5,s7,s8,s9,s10,s11; scanf("%d",&a); for(b=1; b<=a; b++) {scanf("%d",&c); for(d=1; d<=c; d++) { scanf("%d",&k[d]); scanf("%d",&f[d]); scanf("%d",&g[d]); scanf("%d",&h[d]); sum[d]=f[d]+g[d]+h[d]; } for(i=1; i<c; i++) { for(j=1+i; j<=c; j++) { if(sum[i]>sum[j]) { s=sum[i]; sum[i]=sum[j]; sum[j]=s; s1=k[i]; k[i]=k[j]; k[j]=s1; s7=f[i]; f[i]=f[j]; f[j]=s7; s8=g[i]; g[i]=g[j]; g[j]=s8; } else if(sum[i]==sum[j]) { if(f[i]>f[j]) { ss=sum[j]; sum[j]=sum[i]; sum[i]=ss; s2=k[i]; k[i]=k[j]; k[j]=s2; s4=f[i]; f[i]=f[j]; f[j]=s4; s5=g[i]; g[i]=g[j]; g[j]=s5; s10=h[i]; h[i]=h[j]; h[j]=s10; } else if(f[i]==f[j]) { if(g[i]>g[j]) { ss1=sum[i]; sum[i]=sum[j]; sum[j]=ss1; s3=k[i]; k[i]=k[j]; k[j]=s3; s9=g[i]; g[i]=g[j]; g[j]=s9; s11=h[i]; h[i]=h[j]; h[j]=s11; } } } } } for(t=1; t<=c; t++) { printf("%d %d\n",k[t],sum[t]); } } return 0; }