2025 CSP-J2 T1 拼数 / number 题解

· · 题解

(J 组题解链接:T1、T2、T3、T4、视频题解、游记)

:::info[题意简述]

给定一个字符串,在里面选出至少一个数字字符(可以多次选值相同的字符,但同一位置最多只能用一次),重排,问值最大是多少。

保证给定的字符串至少包含一个 1\sim9 的数字字符。

:::

根据我们小学二年级就学过的『正整数的大小比较』,先看位数,位数相同的再看字典序。所以我们要先确保位数最大,因此把字符串中所有数字字符全部提取出来。接下来要看字典序,由于字典序的比较要从前往后,所以我们要让前面的位置尽量大,即从大到小排序

:::success[代码]

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
string str, ans;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> str;
    for (char ch : str)
    {
        if (isdigit(ch))
        {
            ans += ch; // 提取所有数字字符
        }
    }
    sort(ans.begin(), ans.end(), greater<char>()); // 从大到小排序
    cout << ans;
    return 0;
}

:::

:::success[视频题解]

:::