PAT (Advanced Level) Practice 1038 Recover the Smallest Number (30 分) 凌宸1642
2021/8/21 6:06:03
本文主要是介绍PAT (Advanced Level) Practice 1038 Recover the Smallest Number (30 分) 凌宸1642,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
PAT (Advanced Level) Practice 1038 Recover the Smallest Number (30 分) 凌宸1642
题目描述:
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.
译:规定你个一个数字序列集合,,您应该从中恢复最小的数字。 例如,给定 { 32, 321, 3214, 0229, 87 },我们可以恢复许多数字,例如 32-321-3214-0229-87 或 0229-32-87-321-3214 相对于不同的组合顺序 这些段,最小的数字是 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.
译:每个输入文件包含一个测试用例。 每个 case 给出一个正整数 N (≤104),后跟 N 个数字段。 每个段包含一个不超过 8 位的非负整数。 一行中的所有数字都用空格分隔。
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
The Idea:
- 根据题意,其实就是只需要找出满足题意的字符串方式,二而其实题目已经隐含的给出了排序规则,就是组合成最小的数字的顺序,所以可以直接拼接两个字符串,如何拼接最小,即为排序方式。
- 仅仅是位置不变是不够的,因为可以出现这种情况,在数字序列
1 5 2 4 3
中,排序之后的序列为1 2 3 4 5
,其中数字1
和4
的位置都没有发生变化,但是能够满足题题目意思的枢轴的候选者只有1
。这也就产生了作为枢轴候选者的第二个条件:枢轴候选者左边的最大值比枢轴小 (因为题目中说明了 N 个不同的数字)
- 仅仅是位置不变是不够的,因为可以出现这种情况,在数字序列
- 记得去除前导零 。
- 个人见解:题目可能少考虑了一些情况,比如每个数字都有前导 0 的时候,如何抉择?
The Codes:
#include<bits/stdc++.h> using namespace std ; bool cmp(string s1 , string s2){ return s1 + s2 < s2 + s1 ; } int main(){ int n ; cin >> n ; vector<string> ss(n) ; for(int i = 0 ; i < n ; i ++) cin >> ss[i] ; sort(ss.begin() , ss.end() , cmp) ; int temp = stoi(ss[0]) ; // 去除第一个数字的前导零 如 0229 --> 229 string ans = to_string(temp) ; for(int i = 1 ; i < n ; i ++){ temp = stoi(ss[i]) ; if(temp != 0)ans += ss[i] ; // 答案输出为 0 时,避免输出多个0 } cout << ans << endl ; return 0 ; } /* PAT 的测试数据中应该不存在类似于下述这种测试数据: in: 3 00 010 001 */
这篇关于PAT (Advanced Level) Practice 1038 Recover the Smallest Number (30 分) 凌宸1642的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-07Cursor 收费太贵?3分钟教你接入超低价 DeepSeek-V3,代码质量逼近 Claude 3.5
- 2025-01-06PingCAP 连续两年入选 Gartner 云数据库管理系统魔力象限“荣誉提及”
- 2025-01-05Easysearch 可搜索快照功能,看这篇就够了
- 2025-01-04BOT+EPC模式在基础设施项目中的应用与优势
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南
- 2025-01-03图像文字理解,OCR、大模型还是多模态模型?PalliGema2在QLoRA技术上的微调与应用
- 2025-01-03混合搜索:用LanceDB实现语义和关键词结合的搜索技术(应用于实际项目)
- 2025-01-03停止思考数据管道,开始构建数据平台:介绍Analytics Engineering Framework
- 2025-01-03如果 Azure-Samples/aks-store-demo 使用了 Score 会怎样?
- 2025-01-03Apache Flink概述:实时数据处理的利器