首页 > 其他 > 详细

PAT-A1038 Recover the Smallest Number (30 point(s))

时间:2021-02-15 09:47:24      阅读:25      评论:0      收藏:0      [点我收藏+]

题目很简单,就是一开始不知道怎么处理,单纯排序肯定不行,但是我们可以知道,每个字符串都要有它自己的位置,那么位置怎么变化呢?如果字符串A和字符串B,如果是A+B的顺序大于B+A的顺序我们当然知道是B应该在A的前面,其实这就是排序的思想,对任意的两个字符串A和B,如果A+B大于B+A,那么B就在A前面,这就是赤裸裸的排序。

排序代码:

bool cmp(string x, string y)
{
	return x + y < y + x;
}  

  还要注意一点,就是他题目说前导0要去掉,但是如果都是0,还是要输出0的!

	while(*v[cnt].begin() == ‘0‘)
	{
		v[cnt].erase(v[cnt].begin());
		if(v[cnt].empty())
			cnt++;
		if(cnt == n)
			break;
	}

  于是乎,完整代码如下:

#include <bits/stdc++.h>
using namespace std;
vector<string> v;
bool cmp(string x, string y)
{
	return x + y < y + x;
}
int main()
{
	int n, cnt = 0;
	string temp;
	cin >> n;
	for(int i = 0; i < n; i++)
	{
		cin >> temp;
		v.push_back(temp);
	}
	sort(v.begin(), v.end(), cmp);
	while(*v[cnt].begin() == ‘0‘)
	{
		v[cnt].erase(v[cnt].begin());
		if(v[cnt].empty())
			cnt++;
		if(cnt == n)
			break;
	}
	for(int i = 0; i < n; i++)
		cout << v[i];
	if(v[v.size() - 1].empty())
		cout << 0;
	cout << endl;
	return 0;
}

  

 

 

PAT-A1038 Recover the Smallest Number (30 point(s))

原文:https://www.cnblogs.com/jacobfun/p/14401636.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!