标签:
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 (<=10000) 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. Do not output leading zeros.
Sample Input:5 32 321 3214 0229 87Sample Output:
22932132143287
#include <iostream>#include <stdio.h>#include <vector>#include <algorithm>#include <string>#pragma warning(disable:4996)using namespace std;struct Num {string s;char c[8];};vector<Num> num;bool cmp(Num a, Num b) {for (int i = 0; i < 8; i++) {if (a.c[i] < b.c[i]) {return true;}else if(a.c[i] > b.c[i]){return false;}}return true;}bool CheckInput(string s) {for (int i = 0; i < s.length(); i++) {if (s[i] != ‘0‘)return true;}return false;}int main(void) {int n;cin >> n;/*char chartemp;scanf("%c", &chartemp);*/Num numtemp;for (int i = 0; i < n; i++) {cin >> numtemp.s;if (!CheckInput(numtemp.s))continue;for (int i = 0; i < 8; i++) {numtemp.c[i] = numtemp.s[i % (numtemp.s.length())];}num.push_back(numtemp);}if (num.size() == 0) {cout << "0";return 0;}sort(num.begin(), num.end(), cmp);for (int i = 0; i < num.size(); i++) {if (i == 0) {bool flag = false;for (int j = 0; j < num[i].s.length(); j++) {if (num[i].s[j] != ‘0‘)flag = true;if (flag == true)cout << num[i].s[j];}}elsecout << num[i].s;}return 0;}
1038. Recover the Smallest Number (30)
标签:
原文地址:http://www.cnblogs.com/zzandliz/p/5023132.html