【PAT甲级真题】- Recover the Smallest Number (30)

题目来源

Recover the Smallest Number (30)

这是牛客上面最后的一个题了,之后会去写 PTA 上面的题

注意点

  • 注意忽略前导 0
  • 如果全 0 输出 0

题目描述

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.

输入描述:

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.

输出描述:

For each test case, print the smallest number in one line. Do not output leading zeros.

输入例子:

复制代码
5 32 321 3214 0229 87

输出例子:

复制代码
22932132143287

思路简介

一道很有趣的思维题

乍一看好像按照字典序排序就没了,但是其实样例都过不了

先考虑两个数的情况,假设两个数是 a,b ,他们的拼接是 {ab} 比较两个数字 判断拼接后的字符串 ab 和 ba 的字典序关系:

  • 若 ab < ba,则 a 应排在 b 前面。
  • 若 ab > ba,则 b 应排在 a 前面。
    其实到这里就做完了,因为对于多个数而言,这种拼接关系最小的会被放在最前面,次小的第 2 位,依次类推
    这只是一个排序方式,在 sort 函数当中自定义排序即可

注意处理前导零:若排序后字符串以 0 开头,需去掉前导零,若结果为空则返回 0。

遇到的问题

  1. 以为是按字典序,wa了一次

代码

cpp 复制代码
/**
 * https://www.nowcoder.com/pat/5/problem/4025
 * 位排序
 */
#include<bits/stdc++.h>
using namespace std;

void solve(){
    int n;
    cin>>n;
    vector<string>s(n);
    for(int i=0;i<n;++i){
        cin>>s[i];
    }
    sort(s.begin(),s.end(),[](string a,string b){
        return a+b<b+a;
    });
    int f=0;
    for(int i=0;i<n;++i){
        int len=s[i].size();
        for(int j=0;j<len;++j){
            if(!f&&s[i][j]=='0')
                continue;
            f=1;
            cout<<s[i][j];
        }
    }
    if(!f)cout<<0;
}

int main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    //fstream in("in.txt",ios::in);cin.rdbuf(in.rdbuf());
    int T=1;
    //cin>>T;
    while(T--){
        solve();
    }
    return 0;
}
相关推荐
abcy0712132 小时前
flink state实例
大数据·算法·flink
qizayaoshuap2 小时前
# [特殊字符] 密码生成器 — 鸿蒙ArkTS安全算法与密码强度评估系统
java·算法·安全·华为·harmonyos
良木林2 小时前
滑动窗口 - LeetCode hot 100
javascript·算法·leetcode·双指针·滑动窗口
华玥作者2 小时前
uniapp 万条数据不卡顿:我写了个虚拟列表组件 hy-list,原生支持瀑布流
数据结构·uni-app·list·vue3
2401_841495642 小时前
【数据结构】B*树
数据结构·c++·b树·算法·删除·插入·三分分裂
不如语冰3 小时前
AI大模型入门-模块导入import
数据结构·人工智能·pytorch·python
岑梓铭3 小时前
《考研408数据结构》第七章(7.1 查找:顺序查找、折半查找、分块查找)复习笔记
数据结构·笔记·考研·408·ds·查找
壹号用户3 小时前
c++入门之list了解及使用
数据结构·list
QXWZ_IA3 小时前
**电力登高作业高空失保实时监管:千寻智能安全带高挂低用监测方案**
人工智能·科技·算法·能源·智能硬件
来一碗刘肉面3 小时前
什么是双端队列
数据结构·链表