信息学奥赛一本通----1997:梦想

【题目描述】

        能参加大运会,是每个大学生运动员的梦想。大运村男运动员和女运动员是分开入住的,每栋大楼都必须登记运动员的相关信息。登记好后,要按照一定的规则来排序生成编号以便管理。排序的规则是:

         1)请按照国籍的字典序排序

         2)如果国籍相同,年龄小的排在最前面

         3)如果国籍,年龄都相同,请按照姓名的字典序排序。

人工来排,工作非常繁重,于是找到编程高手的你,来帮忙统计处理一下。

【输入】

        第一行一个整数n(0<n≤1000),表示大运村每栋楼入住的人数。

        接下来n行,每行三个数据,分别表示某个运动员的名字(不超过10个字母,其间不含有空格)、年龄、国籍(三个大写字母),一个空格隔开。

【输出】

        n行,每行四个数据,排序后的编号(五位的字符串,编号不足五位前面补零)以及运动员的信息,均是一个空格隔开。

【输入样例】

5
Tom 21 USA
Jack 21 USA
Klac 22 FRA
Ksd 21 FRA
Takla 22 JPN

【输出样例】

00001 Ksd 21 FRA
00002 Klac 22 FRA
00003 Takla 22 JPN
00004 Jack 21 USA
00005 Tom 21 USA

结构体:

        在实际问题中,一组数据往往具有不同的数据类型。为了解决问题,C++语言给出了另一种构造数据类型----“结构体”,它在数据存储方面相当于其他高级语言中的记录,但它有着面向对象的优势。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iomanip>
#include<string>
#include<algorithm>
using namespace std;
struct h{         //定义一个类型名叫h的struct的类型   
	string n,c;
	int age;
}x[1001];         //同时定义了x数组变量 
bool cmp(const h&a,const h&b)
{
	if(a.c>b.c)	
		return 0;
    else if(a.c==b.c)
		if(a.age>b.age)	
			return 0;
	else if(a.age==b.age)
		if(a.n>b.n) 
			return 0;
	return 1;
}
int main()
{
	int v;
	cin>>v;
	for(int i=1;i<=v;i++)
	{
		cin>>x[i].n>>x[i].age>>x[i].c;  //输入名字、年龄和国籍 
	}
	sort(x+1,x+v+1,cmp);   //排序 
	for(int i=1;i<=v;i++)
	{
		printf("%05d",i);     //输出排序后的编号 
		cout<<" "<<x[i].n<<" "<<x[i].age<<" "<<x[i].c<<endl;   //输出排序后的名字、年龄和国籍 
	}
	return 0;
}

【运行结果】

Let`s see~~ 

That`s all ! Thank you !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值