专栏文章

P14357 [CSP-J 2025] 拼数 / number

P14357题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minfomac
此快照首次捕获于
2025/12/02 01:39
3 个月前
此快照最后确认于
2025/12/02 01:39
3 个月前
查看原文

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

题目分析

题目要求我们从给定的字符串中提取数字字符,然后使用这些数字字符拼成最大的正整数。每个数字字符只能使用一次,且不能有前导零。

解题思路

要组成最大的正整数,应该从字符串中提取所有数字字符,将这些数字字符按从大到小排序,并且确保结果是一个正整数(不能以 00 开头)

算法实现

遍历字符串,收集所有数字字符,对收集到的数字字符按从大到小排序, 将排序后的字符连接成字符串输出。

代码实现

CPP
#include <iostream>
#include <string>
#include <algorithm>
#include <functional>
using namespace std;

int main() {
    string s;
    cin >> s;
    
    // 提取所有数字字符
    string d = "";
    for (char c : s) {
        if (c >= '0' && c <= '9') {
            d += c;
        }
    }
    
    // 按从大到小排序
    sort(d.begin(), d.end(), greater<char>());
    
    // 输出结果
    cout << d << endl;
    
    return 0;
}

算法分析

  • 时间复杂度:O(n log n),其中n是字符串长度。主要时间消耗在排序上。
  • 空间复杂度:O(n),用于存储提取的数字字符。
主要考察字符串处理和排序的基本能力。

评论

0 条评论,欢迎与作者交流。

正在加载评论...