C

YONAGI 发表于 19天前 · 关联问题 排名

include<stdio.h>

typedef struct{

char name[15]={0}; int grade[105]={0}; int sum=0;

}Grade; int main(){

Grade list[1005],p; int n=0,m=0; scanf("%d",&n); scanf("%d",&m); for(int i=0;i<n;i++){ scanf("%s",&list[i].name); for(int j=0;j<m;j++){ scanf("%d",&list[i].grade[j]); list[i].sum+=list[i].grade[j]; } } for(int j=0;j<n;j++){ for(int i=0;i<n-1;i++){ if(list[i].sum>list[i+1].sum){ p=list[i]; list[i]=list[i+1]; list[i+1]=p; } else if(list[i].sum==list[i+1].sum){ for(int k=0;k<m;k++){ if(list[i].grade[k]>list[i+1].grade[k]){ p=list[i]; list[i]=list[i+1]; list[i+1]=p; break; } else if(list[i].grade[k]<list[i+1].grade[k]) break; //这时不能让循环像上面一样继续下去, //因为前面的数字优先级更高, //不能让这个不等号成立之后的数字继续参与比较 } } } } while(n--)printf("%s ",list[n].name);//降序输出

}