3665 - 学生成绩的排序
时间限制 : 1 秒
内存限制 : 128 MB
输入n个学生的信息,依次包括姓名、C++成绩、数学成绩。
先按C++成绩的升序排列
如果C++成绩相同,再按数学成绩降序排列
题目输入
第一行有一个整数n,表示以下有n个学生信息将会输入。保证n不大于100。
题目输出
输出有n行,为排序后的学生信息
输入/输出样例
输入格式
3 Li 99 88 Wang 66 22 Liu 66 93
输出格式
Liu:66 93 Wang:66 22 Li:99 88
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; }
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; }
Java解答
import java.util.*; class k implements Comparable<k>{ public String s; public Integer a; public Integer b; k(String s1,int a1,int b1) { s=s1;a=a1;b=b1; } public int compareTo(k o) { //实现接口 int x=a.compareTo(o.a); if(x>0) return 1; else if(x<0) return -1; else return -b.compareTo(o.b); } public void tostring() { System.out.println(s+":"+a+" "+b); } } public class Main { public static void main(String[] args) { java.util.Scanner in=new java.util.Scanner(System.in); while(in.hasNext()) { int n=in.nextInt(); k[] w=new k[n]; for(int i=0;i<n;i++) { String s=in.next(); int a=in.nextInt(); int b=in.nextInt(); w[i]=new k(s,a,b); } Arrays.sort(w); for(int i=0;i<n;i++) { w[i].tostring(); } } } }