3665 - 学生成绩的排序
输入n个学生的信息,依次包括姓名、C++成绩、数学成绩。
先按C++成绩的升序排列
如果C++成绩相同,再按数学成绩降序排列
Input
第一行有一个整数n,表示以下有n个学生信息将会输入。保证n不大于100。
Output
输出有n行,为排序后的学生信息
Examples
Input
3 Li 99 88 Wang 66 22 Liu 66 93
Output
Liu:66 93 Wang:66 22 Li:99 88
Solution C
#include<stdio.h> #include<string.h> int main() { int i,j,n,t,x[2][105]; char x1[105][20]; while(scanf("%d",&n)==1&&n!=0) { memset(x,0,sizeof(x)); memset(x1,0,sizeof(x1)); for(i=1;i<=n;i++) scanf("%s%d%d",x1[i],&x[0][i],&x[1][i]); for(i=1;i<n;i++)\ for(j=i+1;j<=n;j++) { if(x[0][i]>x[0][j]) { t=x[0][i];x[0][i]=x[0][j];x[0][j]=t; t=x[1][i];x[1][i]=x[1][j];x[1][j]=t; strcpy(x1[0],x1[i]); strcpy(x1[i],x1[j]); strcpy(x1[j],x1[0]); } else if(x[0][i]==x[0][j]&&x[1][i]<x[1][j]) { t=x[0][i];x[0][i]=x[0][j];x[0][j]=t; t=x[1][i];x[1][i]=x[1][j];x[1][j]=t; strcpy(x1[0],x1[i]); strcpy(x1[i],x1[j]); strcpy(x1[j],x1[0]); } } for(i=1;i<=n;i++) printf("%s:%d %d\n",x1[i],x[0][i],x[1][i]); } return 0; }
Solution C++
#include<iostream> #include <algorithm> using namespace std; #define N 100 struct student { string name; int cpp; int math; }stu[N]; bool cmp(struct student x,struct student y) { if(x.cpp!=y.cpp) return x.cpp<y.cpp; return x.math>y.math; } int main() { int n,i; cin>>n; for(i=0;i<n;i++) { cin>>stu[i].name>>stu[i].cpp>>stu[i].math; } sort(stu,stu+n,cmp); for(i=0;i<n;i++) { cout<<stu[i].name<<":"<<stu[i].cpp<<' '<<stu[i].math<<endl; } return 0; }