蓝桥——好数——C语言

问题描述

一个整数如果按从低位到高位的顺序,奇数位 (个位、百位、万位 ⋯⋯ ) 上的数字是奇数,偶数位 (十位、千位、十万位 ⋯⋯ ) 上的数字是偶数,我们就称之为 “好数”。

给定一个正整数 NN,请计算从 1 到 NN 一共有多少个好数。

输入格式

一个整数 NN。

输出格式

一个整数代表答案。

样例输入 1

24

样例输出 1

7

样例输入 2

2024

样例输出 2

150

样例说明

对于第一个样例,2424 以内的好数有 11、33、55、77、99、2121、2323,一共 77 个。

评测用例规模与约定

对于 10%10% 的评测用例,1≤N≤1001≤N≤100 。

对于 100%100% 的评测用例,1≤N≤1071≤N≤107 。

运行限制

语言最大运行时间最大运行内存
C++1s256M
C1s256M

代码

#include <stdio.h>

int main() {
    int n, count = 0; 
    scanf("%d", &n); 

    for (int num = 1; num <= n; num++) {
        int m = num; 
        int position = 1; 

        while (m > 0) {
            int digit = m % 10; 
            if ((position % 2 == 1 && digit % 2 == 0) || 
                (position % 2 == 0 && digit % 2 == 1)) {
                break; 
            }
            m /= 10; 
            position++; 
        }

        if (m == 0) {
            count++; 
        }
    }

    printf("%d\n", count); 
    return 0; 
}

代码详解

#include <stdio.h>

int main() {
    int n, count = 0; // 声明变量 n 和用于计数的 count
    scanf("%d", &n); // 从标准输入读取一个正整数 N

    for (int num = 1; num <= n; num++) { // 遍历从 1 到 N 的每一个数
        int m = num; // 当前数字
        int position = 1; // 用于记录位数,从 1 开始

        // 检查每位数字的奇偶性
        while (m > 0) {
            int digit = m % 10; // 取当前最低位的数字
            if ((position % 2 == 1 && digit % 2 == 0) || // 奇位上是偶数
                (position % 2 == 0 && digit % 2 == 1)) { // 偶位上是奇数
                break; // 如果不符合,退出循环
            }
            m /= 10; // 去掉当前最低位
            position++; // 移动到下一位
        }

        // 如果数字的所有位都符合要求
        if (m == 0) {
            count++; // 增加“好数”计数
        }
    }

    printf("%d\n", count); // 输出“好数”的总计数
    return 0; // 程序结束,返回 0
}

相信大家看到这里一定恍然大悟!

如果觉得我讲的还可以的话,请献上你的赞吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值