统计满足条件的4位数个数

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

逐位拆分四位数,判断个位是否大于其余三位之和。

OJ: noi_openjudge

题目 ID: ch0105-26

难度:入门

标签:模拟数位python

日期: 2026-07-30 23:01

题意

给出 nn 个四位数,统计其中个位数字严格大于千位、百位和十位数字之和的数目。

思路

把每个数当作四个字符组成的字符串。将四个字符转换为数字后,前三位的和是 sum(digits[:3]),最后一位是 digits[3],直接比较即可。

answer += condition 利用了 Python 中 True 会按整数 1False 会按整数 0 参与运算,正好完成条件计数。

代码

Python代码

python
count = int(input())
numbers = map(str, input().split())

answer = 0
for number in numbers:
    digits = list(map(int, number))
    answer += digits[3] > sum(digits[:3])

print(answer)

C++代码

cpp
#include <cstdio>

int main(){
    int n,i,a;
    scanf("%d",&n);
    int cnt =0;
    for (i=1;i<=n;i++){
        scanf("%d",&a);
        int t1 = a % 10;
        a = a/10;
        int t2 = a % 10;
        a = a/10;
        int t3 = a % 10;
        a = a/10;
        int t4 = a % 10;

        if( t1>t2+t3+t4){
            cnt++;
        }
    }
    printf("%d\n",cnt);
    return 0;
}

复杂度

每个数只处理四个数位,时间复杂度为 O(n)O(n),额外空间复杂度为 O(1)O(1)

总结

当题目只关心十进制的各个数位时,字符串下标往往比反复除以 1010 更直观。