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

· · 题解

思路

首先,在字符串中提取所有数字字符,存放在新字符串中,再将字符串进行降序排列,即可输出结果。

代码 1

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1000005;
char a[MAXN];
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    string s;
    cin>>s;
    int q=0;
    //提取数字字符
    for(int i=0;i<s.length()&&i<MAXN-1;i++){
        if(s[i]>='0'&&s[i]<='9'){
            a[q++]=s[i];
        }
    }
    // 对数字字符进行降序排序
    sort(a,a + q,greater<char>());
    // 输出结果
    for(int i=0;i<q;i++){
        cout<<a[i];
    }
    return 0;
}

代码简短优化思路

将数字判断用 isdigit 函数代替

for 循环直接用 c 成为 s 中的每个字符

输出直接用字符串,避免循环。

代码 2

#include<bits/stdc++.h>
using namespace std;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    string s;
    cin>>s;
    string digits="";
    // 提取所有数字字符
    for(char c:s){
        if(isdigit(c)){
            digits+=c;
        }
    }
    // 对数字字符进行降序排序
    sort(digits.begin(), digits.end(), greater<char>());
    cout<<digits;
    return 0;
}

如有问题欢迎提出,谢谢!