洛谷C++简单题小练习day21—梦境数数小程序

day21--梦境数数--2.25

习题概述

题目背景

Bessie 处于半梦半醒的状态。过了一会儿,她意识到她在数数,不能入睡。

题目描述

Bessie 的大脑反应灵敏,仿佛真实地看到了她数过的一个又一个数。她开始注意每一个数码(0...9):每一个数码在计数的过程中出现过多少次?

给出两个整数 M 和 N,求在序列 [M,M+1,M+2,...,N−1,N] 中每一个数码出现了多少次。

输入格式

第 1 行: 两个用空格分开的整数 M 和 N。

输出格式

第 1 行: 十个用空格分开的整数,分别表示数码 0...9 在序列中出现的次数。

代码表示

复制代码
#include<bits/stdc++.h>
using namespace std;

int main() {
    int M, N;
    cin >> M >> N;
//创建了一个长度为 10 的整型数组 count
//用于存储每个数字(0 到 9)在序列中出现的次数
    int count[10] = {0}; 
    for (int i = M; i <= N; i++) {
        int num = i;
        while (num > 0) {
            count[num % 10]++; // 获取 num 的最后一位数,之后再对应加1 
            num /= 10;//将 num 的最后一位数字去除
        }
    }
    for (int i = 0; i < 10; i++) {
        cout << count[i];//输出当前数字出现的次数 
        if (i < 9) {
            cout << " ";
        }
    }
    cout << endl;

    return 0;
}

心得体会

  1. int count[10] = {0};

for (int i = M; i <= N; i++) {

int num = i;

while (num > 0) {

count[num % 10]++;

num /= 10;

当我们遍历从 MN 的每一个数字时,可以写在一个循环中,我们需要对每个数字的每一位进行统计。这段代码使用了一个嵌套的 for 循环和 while 循环来实现。

外层的 for 循环会依次将 MN 之间的每个数字赋值给变量 i。这个变量 i 就代表当前正在处理的数字。在内层的 while 循环中,我们首先将当前数字 i 复制给另一个变量 num,以便进行处理。

使用 num % 10 取模运算,获取 num 的最后一位数字。这是通过对 num 取余数来实现的。例如,当 num 是 1234 时,num % 10 的结果就是 4。

使用 count[num % 10]++ 将 num 的最后一位数字作为索引,将 count 数组中相应位置的元素加1。这样就实现了对该数字的出现次数进行统计。

通过 num /= 10 将 num 的最后一位数字去除,以便处理下一位数字。这是通过整除运算来实现的。例如,当 num 是 1234 时,num /= 10 的结果就是 123。

通过不断重复这个过程,我们可以逐位统计每个数字在当前数字 i 中的出现次数,直到 num 不再大于 0。这样,内层的 while 循环会处理完当前数字 i 的所有位数,并将统计结果记录在 count 数组中。然后,外层的 for 循环会继续处理下一个数字,直到遍历完从 MN 的所有数字。

  1. 整体代码可以这样理解

这段C++代码的主要目标是统计在给定序列 [M, M+1, M+2, ..., N-1, N] 中每个数字(0到9)出现的次数。它的实现过程可以总结如下:

1)声明两个整数类型的变量 MN,并从输入中读取它们的值。

2)创建一个长度为10的整型数组 count,用于存储每个数字在序列中出现的次数,并将数组的所有元素初始化为0。

3)使用一个循环遍历从 MN 的所有数字。

4)在循环内部,使用取模运算获取当前数字的最后一位,并将对应位置的 count 数组元素加1,以统计该数字的出现次数。然后通过整除运算去除当前数字的最后一位,以便处理下一位数字。

5)使用另一个循环遍历 count 数组中的所有元素,输出每个数字的出现次数。同时,在输出之间添加空格进行分隔。

6)最后,输出一个换行符以确保输出结果的格式正确。

7)程序正常结束并返回值为0。

相关推荐
胖咕噜的稞达鸭2 小时前
算法入门:专题攻克一---双指针(3)有效三角形的个数 查找总价格为目标值的两个商品(剑指offer题目)
算法
Rock_yzh3 小时前
AI学习日记——参数的初始化
人工智能·python·深度学习·学习·机器学习
gopyer3 小时前
180课时吃透Go语言游戏后端开发6:Go语言的循环语句
开发语言·游戏·golang·循环语句
今天只学一颗糖6 小时前
Linux学习笔记--insmod 命令
linux·笔记·学习
charlie1145141916 小时前
精读C++20设计模式:行为型设计模式:中介者模式
c++·学习·设计模式·c++20·中介者模式
楼田莉子6 小时前
Qt开发学习——QtCreator深度介绍/程序运行/开发规范/对象树
开发语言·前端·c++·qt·学习
逻辑留白陈6 小时前
Adaboost进阶:与主流集成算法对比+工业级案例+未来方向
算法
Learn Beyond Limits6 小时前
Mean Normalization|均值归一化
人工智能·神经网络·算法·机器学习·均值算法·ai·吴恩达
oioihoii7 小时前
超越 std::unique_ptr:探讨自定义删除器的真正力量
c++
天选之女wow7 小时前
【代码随想录算法训练营——Day28】贪心算法——134.加油站、135.分发糖果、860.柠檬水找零、406.根据身高重建队列
算法·leetcode·贪心算法