TB椰程 TypeBuddy 打字搭子

2025 拼数 · 方案二 桶计数

CSP-J 标程 · 复赛真题 · 代码 · cpp · 难度 2/5 · 共 680 字

数出每个数字出现几次,从 9 输出到 0

  • 2025
  • 字符串

正文

// CSP-J 2025 复赛 T1 · 拼数(方案二)
// 原题:https://oj.yecheng.tv/p/CSP2025JA
//
// 方案二 · 桶计数(连排序都省了)
// 数字只有 0 到 9 十种,与其排序 O(|s| log |s|),不如开一个 cnt[10] 数一数
// 每个数字各出现几次,然后从 9 到 0 依次输出 —— 这样得到的正是降序排列。
// 复杂度 O(|s| + 10),比排序更快,也是「值域很小」时的通用套路。

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

int cnt[10];

int main() {
    freopen("number.in", "r", stdin);
    freopen("number.out", "w", stdout);

    string s;
    cin >> s;
    for (int i = 0; i < (int)s.size(); i++) {
        if (s[i] >= '0' && s[i] <= '9') cnt[s[i] - '0']++;
    }

    for (int d = 9; d >= 0; d--) {          // 从大到小输出,就是最大值
        for (int t = 0; t < cnt[d]; t++) cout << d;
    }
    cout << "\n";
    return 0;
}

CSP-J 标程 · 复赛真题的其它内容

打字首页 · 词库画廊 · 编程打字 · 指法入门 · 天梯榜 · 数据分析 · 班级课堂 · 关于我们
椰程 TypeBuddy 打字搭子 —— 键盘指法练习 · 单词记忆 · 班级课堂 · 在线 PK