判定 m % 19 == 0 且十进制写法里数字 3 恰好出现 k 次:整除用取模,数位统计用逐位取个位再除以 10,两个条件逻辑与。
OJ: roj
题目 ID: 1090
难度:入门
标签:模拟数位python
创建: 2026-09-29 18:17
更新: 2026-10-05 00:39
题目描述
输入 YES,否则输出 NO。例如输入 43833 3 输出 YES。
思路
两个独立条件做逻辑与:m % 19 == 0 判整除,把 3 的个数。
注意是恰好 == 而不是 >=),且任一条件不满足都输出 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;
}