把每个四位数的个位与其余三位数字之和比较,统计大于零的个数。
OJ: roj
题目 ID: 1077
难度:入门
标签:入门模拟字符串python
创建: 2026-09-29 17:42
更新: 2026-10-05 00:21
题目描述
给定
输入两行,第一行为 5 加 1234 1349 6119 2123 5017,样例输出:3。
思路
对每个四位数拆出千位、百位、十位、个位,判定 d - a - b - c > 0,满足则计数加一,遍历一遍即可。
参考代码
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 17:42
# update_at: 2026-09-29 17:42
import sys
def digit_sum(value: int) -> int:
"""求一个正整数的十进制各位数字之和。"""
return sum(map(int, str(value)))
def solve() -> None:
data = iter(map(int, sys.stdin.buffer.read().split()))
n = next(data) # 四位数的个数
# divmod(x, 10) 依次给出 (x // 10, x % 10):去掉个位的前缀,以及个位本身
readings = (divmod(next(data), 10) for _ in range(n))
# 个位 - 千位 - 百位 - 十位 > 0 ⟺ 个位 > 其余三位数字之和
print(sum(digit_sum(rest) < units for rest, units in readings))
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:20
* update_at: 2026-10-05 00:20
*/
// main.cpp:统计满足 个位 - 千位 - 百位 - 十位 > 0 的四位数的个数。
// 等价改写为 个位 > 千位 + 百位 + 十位;对每个四位数拆位判定后累加。
#include <iostream>
using namespace std;
typedef long long ll;
const int MAXN = 105;
ll n;
ll x[MAXN]; // 读入的四位数,n ≤ 100,留一点余量
ll ans; // 满足条件的数的个数
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for (ll i = 1; i <= n; i++) {
cin >> x[i];
}
// 对每个四位数逐位拆开:千位 a、百位 b、十位 c、个位 d
for (ll i = 1; i <= n; i++) {
ll a = x[i] / 1000;
ll b = (x[i] / 100) % 10;
ll c = (x[i] / 10) % 10;
ll d = x[i] % 10;
if (d - a - b - c > 0) {
ans++;
}
}
cout << ans << "\n";
return 0;
}