题解:P14357 [CSP-J 2025] 拼数 / number

· · 题解

题目传送门

题目分析

本题要求在给定的字符串中选定数字使得拼出的数最大。

我们可以把字符串中的数字找出来进行处理。

实现细节

首先,我们遍历整个字符串,找出其中所有的数字,代码如下:

for (int i = 0; i < s.length(); i++)
{
    if (s[i] >= '0' && s[i] <= '9')
        a[++t] = s[i] - 48;
}

接着,为了使拼出的数最大,我们把这些数字从大到小排序。代码如下:

bool cmp(int a, int b)
{
    return a > b;
}
sort(a + 1, a + t + 1, cmp);

最后,我们依次输出即可。

代码实现

#include <bits/stdc++.h>
using namespace std;

string s;
int a[1000005], t;

bool cmp(int a, int b)
{
    return a > b;
}

int main()
{
    cin >> s;
    for (int i = 0; i < s.length(); i++)
    {
        if (s[i] >= '0' && s[i] <= '9')
            a[++t] = s[i] - 48;
    }
    sort(a + 1, a + t + 1, cmp);
    for (int i = 1; i <= t; i++)
        cout << a[i];
    cout << endl;
    return 0;
}