1038. Recover the Smallest Number (30)
2015-12-06 10:43
405 查看
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:[/b]
来源: <http://www.patest.cn/contests/pat-a-practise/1038>
[/code]
来自为知笔记(Wiz)
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:[/b]
5 32 321 3214 0229 87Sample Output:[/b]
22932132143287
来源: <http://www.patest.cn/contests/pat-a-practise/1038>
#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];
}
}
else
cout << num[i].s;
}
return 0;
}
[/code]
来自为知笔记(Wiz)
相关文章推荐
- 1037. Magic Coupon (25)
- IP Address
- 【Leetcode】Search for a Range
- 字符编码笔记:ASCII,Unicode和UTF-8
- 1036. Boys vs Girls (25)
- USART---串口发送数据
- C# explicit与implicit
- 1035. Password (20)
- javascript字符串函数汇总
- C中qsort的补局限和C++中sort的用法
- IP地址
- 【Html】caption标签,为表格添加标题和摘要
- 1034. Head of a Gang (30)
- 1033. To Fill or Not to Fill (25)
- matlab function与script文件的区别
- n皇后问题
- Hive ORC文件格式存储与测试(Malformed ORC file解决)
- 某去网的mapreduce面试题
- 最优布线问题
- Java学习笔记(集合_1)