题解:P14357 [CSP-J 2025] 拼数 / number(民间数据)

· · 题解

思路

这道题可以直接使用暴力枚举,我们先用 s 将字符串存起来,再遍历一遍 s,如果当前 s_i 的 ASCII 码再字符 0 到字符 9 之间,则为数字,存入一个 a 数组中,每次将数字位减去字符 0 再插入 a 数组,最后排序后再倒序输出。

代码:

#include <bits/stdc++.h>
using namespace std;
string s;int a[1000005],cnt;//s 为题意需要,a为记录数组,cnt为当前到哪个序号以及 a 数组长度
int main(){
//  freopen("number.in" ,"r" ,stdin);
//  freopen("number.out","w",stdout);
    cin >> s;
    for (int i = 0;i < s.size();i++) if (s[i] <= '9' && s[i] >= '0') a[++cnt] = s[i]-'0';//如果当前位置上的字符在 '0' 到 '9' 之间,则插入 a 数组,对应序号++
    sort(a+1,a+cnt+1);//排序
    for (int i = cnt;i >= 1;i--) cout << a[i];//倒序输出
    return 0;
}