P14357 [CSP-J 2025] 拼数 / number
P14357 [CSP-J 2025] 拼数 / number
题目描述
小 R 正在学习字符串处理。小 X 给了小 R 一个字符串 s s s,其中 s s s 仅包含小写英文字母及数字,且包含至少一个 1 ∼ 9 1 \sim 9 1∼9 中的数字。小 X 希望小 R 使用 s s s 中的任意多个数字,按任意顺序拼成一个正整数。注意:小 R 可以选择 s s s 中相同的数字,但每个数字只能使用一次。例如,若 s s s 为 1 a 01 b \tt 1a01b 1a01b,则小 R 可以同时选择第 1 , 3 , 4 1,3,4 1,3,4 个字符,分别为 1 , 0 , 1 1,0,1 1,0,1,拼成正整数 101 101 101 或 110 110 110;但小 R 不能拼成正整数 111 111 111,因为 s s s 仅包含两个数字 1 1 1。小 R 想知道,在他所有能拼成的正整数中,最大的是多少。你需要帮助小 R 求出他能拼成的正整数的最大值。
输入格式
输入的第一行包含一个字符串 s s s,表示小 X 给小 R 的字符串。
输出格式
输出一行一个正整数,表示小 R 能拼成的正整数的最大值。
输入输出样例 #1
输入 #1
5
输出 #1
5
输入输出样例 #2
输入 #2
290es1q0
输出 #2
92100
说明/提示
【样例 2 解释】
s s s 包含数字 2 , 9 , 0 , 1 , 0 2,9,0,1,0 2,9,0,1,0。可以证明,小 R 拼成的正整数的最大值为 92100 92100 92100。
【样例 3】
见选手目录下的 n u m b e r / n u m b e r 3. i n number/number3.in number/number3.in 与 n u m b e r / n u m b e r 3. a n s number/number3.ans number/number3.ans。该样例满足测试点 9 ∼ 11 9 \sim 11 9∼11 的约束条件。
【样例 4】
见选手目录下的 n u m b e r / n u m b e r 4. i n number/number4.in number/number4.in 与 n u m b e r / n u m b e r 4. a n s number/number4.ans number/number4.ans。该样例满足测试点 20 20 20 的约束条件。
【数据范围】
设 ∣ s ∣ |s| ∣s∣ 为字符串 s s s 的长度。对于所有测试数据,保证:
- 1 ≤ ∣ s ∣ ≤ 1 0 6 1 \leq |s| \leq 10^6 1≤∣s∣≤106;
- s s s 仅包含小写英文字母及数字,且包含至少一个 1 ∼ 9 1 \sim 9 1∼9 中的数字。
::cute-table{tuack}
| 测试点编号 | ∣ s ∣ ≤ \lvert s\rvert \leq ∣s∣≤ | 特殊性质 |
|---|---|---|
| 1 1 1 | 1 1 1 | A |
| 2 2 2 | 2 2 2 | ^ |
| 3 3 3 | ^ | 无 |
| 4 4 4 | 10 10 10 | A |
| 5 , 6 5,6 5,6 | ^ | 无 |
| 7 , 8 7,8 7,8 | 1 0 2 10^2 102 | A |
| 9 ∼ 11 9 \sim 11 9∼11 | ^ | 无 |
| 12 12 12 | 1 0 3 10^3 103 | A |
| 13 , 14 13,14 13,14 | ^ | 无 |
| 15 15 15 | 1 0 5 10^5 105 | A |
| 16 , 17 16,17 16,17 | ^ | B |
| 18 , 19 18,19 18,19 | ^ | 无 |
| 20 20 20 | 1 0 6 10^6 106 | A |
| 21 , 22 21,22 21,22 | ^ | B |
| 23 ∼ 25 23 \sim 25 23∼25 | ^ | 无 |
- 特殊性质 A: s s s 仅包含数字。
- 特殊性质 B: s s s 仅包含不超过 1 0 3 10^3 103 个数字。
解题思路想清楚,代码非常easy
题意:输入字符串,仅包含小写英文字母及数字,且包含至少一个 1∼9 中的数字,输出使用其中任意多个数字字符拼成的最大正整数,且每个数字字符只能用一次,存在两个相同的则每个都可以用一次。
解析:要想得到的正整数最大,自然位数越长越好,每一个数字越大越好。则应该将所有的数字字符都用上,且从前往后依次为较大的数字字符。
解决方案:将所有字符升序排序,则字符串字符顺序为:小写字母a~z,数字字符 ′ 0 ′ '0' ′0′~ ′ 9 ′ '9' ′9′,此时从后往前依次输出数字字符,得到的即是最大正整数。
#include<bits/stdc++.h>
using namespace std;
int main(){
char arr[1000001];
cin>>arr;
int len=strlen(arr);
sort(arr, arr+len);
for(int i=len-1; i>=0; i--){
if(isdigit(arr[i]))
cout<<arr[i];
}
return 0;
}
更多推荐




所有评论(0)