LevOJ P1135NBA总冠军

题目描述

又要考试了,Ljw 决定放松一下,就打开电视,看见了篮球赛,他立即想到了每年的 NBA 总冠军队伍。由于复习紧张,他只记起了一部分,记忆的内容是正确的,可能不是按时间顺序排列的,记忆的内容可能有重复。现在请求学过编程的你帮助 Ljw,按时间依次输出总冠军的球队(不能重复)。(NBA 从 1947A.D 到 2017A.D)

输入描述

第一行是一个整数 n( 0 <n<80 )。接下来的 n行,每行先是城市名(由大小写字母、空格组成),后是时间(由数字组成)二者之间用空格隔开

输出描述

共 n 行,即排序后的 NBA 总冠军队伍。每行先是时间,后是城市名。

样例输入

4
Boston 1963
Boston 1959
Philly 1947
New York 1970
6
Los Angeles 2000
Miami 2006
Boston 1964
Los Angeles 2000
Boston 1965
Los Angeles 2002

样例输出

1947 Philly
1959 Boston
1963 Boston
1970 New York
1964 Boston
1965 Boston
2000 Los Angeles
2002 Los Angeles
2006 Miami

AC代码

#include<iostream>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
typedef struct nba			//定义结构体来存储信息
{
	string str;
	int year;
}NBA;
bool cmp(NBA& x, NBA& y)		
{
	return x.year < y.year;
}
int main()
{
	int n;
	while (scanf("%d", &n) != EOF)
	{
		getchar();				//吸收输入n以后的那个回车
		NBA arr[1000];
		int i;
		for (i = 0; i < n; i++)
		{
			getline(cin, arr[i].str);				//先将整体当作一个字符串输入
			int j;
			int temp = 0;
			int index = 0;
			
			//将后四位的数字拿出来,转换成年份
			for (j = arr[i].str.length() - 1; j >= arr[i].str.length() - 4; j--)
			{
				temp += (arr[i].str[j] - '0') * pow(10, index);
				index++;
			}
			arr[i].year = temp;
			//删除后四位数字
			arr[i].str.erase(arr[i].str.size() - 4, 4);
		}
		int j;
		i = 1;
		int length = n;
		while (i < length)
		{
			int flag = 1;		//标志变量,判断是否有重复内容
			int index = i;
			//找是否有重复输入
			for (j = 0; j < i; j++)
			{
				if (arr[j].year == arr[i].year)
				{
					//将重复的内容覆盖掉,然后长度减1
					for (index; index < length - 1; index++)
					{
						arr[index].str = arr[index + 1].str;
						arr[index].year = arr[index + 1].year;
						flag = 0;
					}
					length--;
					break;
				}
			}
			if (flag)  i++;
		}

		sort(arr, arr + length, cmp);		//排序
		for (i = 0; i < length; i++)
		{
			cout << arr[i].year << " " << arr[i].str << endl;
		}
	}
	return 0;
}

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ttzif

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值