游客 Signup | Login
中文 | En

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;                    
}

Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题