含k个3的数

GitHub跳转原题关系图返回列表

判定 m % 19 == 0 且十进制写法里数字 3 恰好出现 k 次:整除用取模,数位统计用逐位取个位再除以 10,两个条件逻辑与。

OJ: roj

题目 ID: 1090

难度:入门

标签:模拟数位python

创建: 2026-09-29 18:17

更新: 2026-10-05 00:39

题目描述

输入 m,km,k(1<m<1000001<m<100000,1<k<51<k<5):若 mm 能被 1919 整除,且十进制写法中数字 33 恰好出现 kk 次,输出 YES,否则输出 NO。例如输入 43833 3 输出 YES。

思路

两个独立条件做逻辑与:m % 19 == 0 判整除,把 mm 反复取个位、除以 1010 统计数字 3 的个数。 注意是恰好 kk 个(用 == 而不是 >=),且任一条件不满足都输出 NO。

参考代码

Python 版:

python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 18:17
# update_at: 2026-09-29 18:17

import sys


def solve() -> None:
    """判断 m 能否被 19 整除,且十进制写法里恰好含 k 个数字 3。"""
    m, k = map(int, sys.stdin.buffer.read().split())
    s = str(m)                                    # 十进制写法,数位个数最多 5(m < 100000)
    count_of_3 = s.count('3')                     # 数字 3 出现的次数
    is_multiple_of_19 = m % 19 == 0               # 整除判定
    print('YES' if is_multiple_of_19 and count_of_3 == k else 'NO')


if __name__ == "__main__":
    solve()

C++ 版(同一算法):

cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2026-10-05 00:39
 * update_at: 2026-10-05 00:39
 */
#include <iostream>
using namespace std;

typedef long long ll;

int main() {
    ll m, k;
    cin >> m >> k;

    // 逐位取个位统计数字 3 出现的次数(m 最多五位数)
    ll count_of_3 = 0;
    ll t = m;
    while (t > 0) {
        if (t % 10 == 3) {
            count_of_3++;
        }
        t /= 10;
    }

    // 两个条件必须同时满足:能被 19 整除,且 3 恰好出现 k 次
    if (m % 19 == 0 && count_of_3 == k) {
        cout << "YES" << "\n";
    } else {
        cout << "NO" << "\n";
    }

    return 0;
}