PAT甲级练习题A1038. Recover the Smallest Number (30)
2016-09-01 22:25
513 查看
题目描述
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 87
Sample Output:
22932132143287
题目解析
使用string储存数字,然后排序,这里我自己写了一个递归的判断函数;
参考 @浅蓝 可以使用一个简单的判断条件 a+b
代码
#include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; bool my_comp(string a, string b) { if (a.size() < b.size() && a == b.substr(0, a.size())) { return my_comp(a, b.substr(a.size(), b.size() - a.size())); } else if (a.size() > b.size() && b == a.substr(0, b.size())) { return my_comp(a.substr(b.size(), a.size() - b.size()), b); } else return a < b; } int main() { int N; cin >> N; vector<string> num(N); for (int i = 0; i < N; ++i) { cin >> num[i]; } sort(num.begin(), num.end(),my_comp); string sum; for (int i = 0; i < num.size(); ++i) { sum+= num[i]; } auto it = sum.find_first_not_of('0'); if (it == sum.npos) cout << 0 << endl; else cout << sum.substr(it, sum.size() - it) << endl; system("pause"); return 0; }
相关文章推荐
- PAT甲级练习题A1022. Digital Library (30)
- PAT甲级练习题A1018. Public Bike Management (30)
- 【PAT甲级】1068. Find More Coins (30)
- PAT甲级练习题A1004. Counting Leaves
- 1018. Public Bike Management (30) PAT 甲级
- 1068. Find More Coins (30)-PAT甲级真题(01背包)
- 1030. Travel Plan (30)-PAT甲级真题(Dijkstra + DFS,输出路径,边权)
- 1119. Pre- and Post-order Traversals (30)-PAT甲级真题(前序后序转中序)
- 【PAT甲级】1004. Counting Leaves (30)——JAVA实现
- PAT(甲级)1022. Digital Library (30)
- PAT甲级1001-Public Bike Management (30)
- PAT 甲级 1038. Recover the Smallest Number (30)
- PAT 甲级 1057. Stack (30)
- PAT 甲级 1072. Gas Station (30)
- pat甲级1022. Digital Library (30)
- 浙大pat | 浙大pat 牛客网甲级 1010 Build A Binary Search Tree (30) 二叉搜索树
- PAT甲级 1099. Build A Binary Search Tree (30)
- PAT甲级 1053. Path of Equal Weight (30)
- 1107. Social Clusters (30)-PAT甲级真题
- PAT 甲级 1018. Public Bike Management (30)