洛谷 P1554 梦中的统计 题解

avatar
作者
筋斗云
阅读量:0

题目背景

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

题目描述

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

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

输入格式

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

输出格式

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

输入输出样例

输入 #1

129 137

输出 #1

1 10 2 9 1 1 1 1 0 1

说明/提示

数据保证,1≤M≤N≤2×10^9,N−M≤5×10^5。

思路:

        思路1:

        定义一个函数,然后从M遍历到N,每次调用一次函数

        优点:不用管循环变量是否改变

        缺点:要多写一个函数

        思路2:

                从M遍历到N,每个i都算一下

                优点:不用写额外的函数

                缺点:每次算的时候,原来的循环变量不能改变       

AC代码1: 

//思路1 #include<bits/stdc++.h>//万能头文件 using namespace std;//cin,cout必备 int cnt[10];//每个数字的个数 int main()//main主函数 { 	int m,n;//定义变量     cin >> m >> n;//输入     for(int i=m;i<=n;i++)//m到n     {         int j=i;//循环变量不能改变         while(j)//一直÷10,直到结果为0         {             cnt[j%10]++;//对应的数++             j/=10;//别忘了这个         }     }     for(int i=0;i<10;i++)//输出0~9的值     {         cout<<cnt[i]<<" ";     } 	return 0;//程序结束 } 

AC代码2:

//思路1 #include<bits/stdc++.h>//万能头文件 using namespace std;//cin,cout必备 int cnt[10];//每个数字的个数 int main()//main主函数 { 	int m,n;//定义变量     cin >> m >> n;//输入     for(int i=m;i<=n;i++)//m到n     {         int j=i;//循环变量不能改变         while(j)//一直÷10,直到结果为0         {             cnt[j%10]++;//对应的数++             j/=10;//别忘了这个         }     }     for(int i=0;i<10;i++)//输出0~9的值     {         cout<<cnt[i]<<" ";     } 	return 0;//程序结束 } 

这篇博客就到这里啦,我们下篇再见!

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!