• C语言练习百题之9的次数


    题目:统计1~100之间出现了几次数字9

    程序分析

    我们需要实现一个程序来统计1到100之间数字9出现的次数。在这个问题中,我们可以使用三种方法来解决:

    1. 迭代法: 使用循环迭代从1到100,逐个检查每个数字中是否包含数字9。
    2. 字符串法: 将数字转换为字符串,然后检查字符串中是否包含字符’9’。
    3. 数学法: 使用数学方法来计算数字9的出现次数,无需实际遍历所有数字。

    让我们分别实现这三种方法。

    方法一:迭代法

    解题思路:

    1. 使用循环迭代从1到100。
    2. 对于每个数字,将其不断除以10并检查余数,看是否包含数字9。
    3. 如果包含数字9,则增加计数器。
    4. 最后输出计数器的值。

    实现代码:

    #include 
    
    int main() {
        int count = 0;
    
        for (int num = 1; num <= 100; num++) {
            int n = num;
            while (n > 0) {
                if (n % 10 == 9) {
                    count++;
                    break;
                }
                n /= 10;
            }
        }
    
        printf("Method 1: The digit 9 appears %d times between 1 and 100.\n", count);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    优点:

    • 简单易懂。
    • 通用性强,适用于各种编程语言。

    缺点:

    • 在大范围内的数字统计时可能效率较低。

    方法二:字符串

    解题思路:

    1. 使用循环迭代从1到100。
    2. 将每个数字转换为字符串。
    3. 对于每个字符串,检查其中是否包含字符’9’。
    4. 如果包含字符’9’,增加计数器。
    5. 最后输出计数器的值。

    实现代码:

    #include 
    #include 
    
    int main() {
        int count = 0;
    
        for (int num = 1; num <= 100; num++) {
            char str[4];  // 数字不超过3位
            snprintf(str, sizeof(str), "%d", num);
    
            if (strchr(str, '9') != NULL) {
                count++;
            }
        }
    
        printf("Method 2: The digit 9 appears %d times between 1 and 100.\n", count);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    优点:

    • 使用字符串函数简化了检查过程。
    • 通用性强,适用于各种编程语言。

    缺点:

    • 需要额外的内存来存储字符串。
    • 在大范围内的数字统计时可能效率较低。

    方法三:数学法

    解题思路:

    1. 分析数字9在个位、十位和百位的出现规律。
    2. 从1到100,每10个数字中,有一个包含数字9(9, 19, 29, …)。
    3. 对于每10个数字,有9个不包含数字9。
    4. 计算包含数字9的组数和不包含数字9的组数。
    5. 计算总共包含数字9的次数。

    实现代码:

    #include 
    
    int main() {
        int count = 0;
    
        for (int num = 1; num <= 100; num++) {
            if (num % 10 == 9 || (num / 10) % 10 == 9) {
                count++;
            }
        }
    
        printf("Method 3: The digit 9 appears %d times between 1 and 100.\n", count);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    优点:

    • 高效,无需实际遍历所有数字。
    • 不需要额外的内存。

    缺点:

    • 相对于方法一和方法二,更特定于这个问题。

    总结

    在这个问题中,推荐使用方法三,即数学法。它是最高效的解决方案,无需实际遍历所有数字,而是利用规律直接计算出结果。方法一和方法二虽然通用,但在大范围内的数字统计时可能效率较低,而且方法二需要额外的内存来存储字符串。方法三是最好的选择,特别是在需要统计大范围内数字出现次数时。

  • 相关阅读:
    零基础Linux_20(进程信号)内核态和用户态+处理信号+不可重入函数+volatile
    Liunx 日志 常规命令查询
    yolov5模型代码怎么修改
    数组问题之《两数之和》以及《三数之和 》
    RK3568驱动指南|第五期-中断-第44章 共享工作队列实验
    AI教程视频 - 零基础玩转illustrator科研绘图-内容介绍-目录
    工具分享:Springboot+Netty+Xterm搭建一个网页版的SSH终端
    RHCE之web服务器搭建
    Arduino中安装ESP32网络抽风无法下载 暴力解决办法 python
    Opencv在linux下安装和配置
  • 原文地址:https://blog.csdn.net/2302_79769289/article/details/133802801