成绩排序题目

题目描述

有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。

输入描述:

测试数据有多组,每组输入第一行有一个整数N(N<=1000),接下来的N行包括N个学生的数据。
每个学生的数据包括姓名(长度不超过100的字符串)、年龄(整形数)、成绩(小于等于100的正数)。

输出描述:

将学生信息按成绩进行排序,成绩相同的则按姓名的字母序进行排序。
然后输出学生信息,按照如下格式:
姓名 年龄 成绩

学生姓名的字母序区分字母的大小写,如A要比a的字母序靠前(因为A的ASC码比a的ASC码要小)。

示例1

输入

复制

3
abc 20 99
bcd 19 97
bed 20 97
#include<iostream>
#include<string>
using namespace std;
typedef struct N
{
	string s;
	int age;
	int grade;
} stu;


bool cmp(stu a, stu b)
{
    if (a.grade != b.grade)
    {
        return a.grade < b.grade;
    }
    else if (a.s!=b.s)
    {
        return a.s<b.s;
    }
    else
    {
        return a.age < b.age;
    }
}
int main()
{
	int n;
	cin>>n;
	stu a[1002]; 
	for(int i=0;i<n;i++)
	{
		cin>>a[i].s>>a[i].age>>a[i].grade;
	}
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n-i-1;j++)
		{
			if(cmp(a[j],a[j+1])==false)
			{
				stu tmp=a[j];
				a[j]=a[j+1];
				a[j+1]=tmp;
			}
		}
	}
		for(int i=0;i<n;i++)
	{
		cout<<a[i].s<<" "<<a[i].age<<" "<<a[i].grade<<endl;
	}
    return 0;
}

输出

复制

bcd 19 97
bed 20 97
abc 20 99

猜你喜欢

转载自blog.csdn.net/cx1165597739/article/details/90173058
今日推荐