PTA甲级1038 Recover the Smallest Number (30分)

首先,先贴柳神的博客

https://www.liuchuo.net/ 这是地址

想要刷好PTA,强烈推荐柳神的博客,和算法笔记

题目原文

1038 Recover the Smallest Number (30分)

Given a collection of number segments, you are supposed to recover the smallest number from them. For example, given { 32, 321, 3214, 0229, 87 }, we can recover many numbers such like 32-321-3214-0229-87 or 0229-32-87-321-3214 with respect to different orders of combinations of these segments, and the smallest number is 0229-321-3214-32-87.

Input Specification:

Each input file contains one test case. Each case gives a positive integer N (≤104) followed by N number segments. Each segment contains a non-negative integer of no more than 8 digits. All the numbers in a line are separated by a space.

Output Specification:

For each test case, print the smallest number in one line. Notice that the first digit must not be zero.

Sample Input:

5 32 321 3214 0229 87

Sample Output:

22932132143287

生词如下

collection 采集

题目大意

就是给你若干个字符串,有可能带着前置的0,要你把他们排序成最小的数

思路如下:

① 对数字串S1和S2,如果S1+S2<S2+S1的话,把S1放到S2的前面,证明过程过

代码如下

#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
const int maxn = 10010;
string str[maxn];
bool cmp(string a, string b) { return a + b < b + a; }
int main(void) {
	int n;
	cin >> n;
	for (int i = 0; i < n; i++)	cin >> str[i];
	sort(str, str + n, cmp);
	string ans;	//结果字符串
	for (int i = 0; i < n; i++)	ans += str[i];
	while (ans.size() != 0 && ans[0] == '0')	ans.erase(ans.begin());
	if (ans.size() == 0)	cout << 0;
	else		cout << ans;
	return 0;
}
posted @ 2020-03-26 13:01  黄鹏宇  阅读(196)  评论(0)    收藏  举报