2025 CSP-J2 T1 拼数 / number 题解
(J 组题解链接:T1、T2、T3、T4、视频题解、游记)
:::info[题意简述]
给定一个字符串,在里面选出至少一个数字字符(可以多次选值相同的字符,但同一位置最多只能用一次),重排,问值最大是多少。
保证给定的字符串至少包含一个
:::
根据我们小学二年级就学过的『正整数的大小比较』,先看位数,位数相同的再看字典序。所以我们要先确保位数最大,因此把字符串中所有数字字符全部提取出来。接下来要看字典序,由于字典序的比较要从前往后,所以我们要让前面的位置尽量大,即从大到小排序。
:::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[视频题解]
:::