IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 对于1到n的所有自然数,计算0到n所有数字(0-9之间的数字)出现的次数分布。 -> 正文阅读

[数据结构与算法]对于1到n的所有自然数,计算0到n所有数字(0-9之间的数字)出现的次数分布。

因脑袋实在转不过来了。特此记录/大哭!!!!

题目详情如标题并如图所示。
题目详情

设输入的值为666,求1~ 666中含有多少个1。
百位数为1时:可能的值有100~199									100个
十位数为1时:可能的值有010、011、...610							70个
个位数为1时:可能的值有001、011、021、...661				67个
此过程可视为
因666为三位数,所以设,百位 数字位x,十位数字为y,个位数字为z。
百位数为1时:1 y[0,9]  z[0,9]					    10*10=100个
十位数为1时:x[0~6] 1 z[0~9]						7*10=70个
个位数为1时:(xy)[0~66] 1		因xy取值必须小于等于66	 所以有67个

总结x y z 取值的特征可得 假设值为xyz。 x,y,z>1
百位数个数:11010
十位数个数:x*10
个位数个数:xy+1

再设值为111,求含有多少个1。
百位数为1时:1 (yz)[0,11],		因yz取值必须小于等于11				 12=12个
十位数为1时:x[0,0] 1 z[0,9],	x[1,1] 1 z[0,1]						10+1*2=12个
个位数为1时:(xy)[0,11] 1		因xy取值必须小于等于11		 所以有12个

总结x y z 取值的特征可得 假设值为xyz。 x,y,z=1
百位数个数:yz+1
十位数个数:x*10
个位数个数:xy+1

再设值为101,求含有多少个1。
百位数为1时:1 yz[0,1]			因xy取值必须小于等于1			 2=2个
十位数为1时:x[0,0] 1 z[0~9],									10=10个
个位数为1时:(xy)[0~10] 1		因xy取值必须小于等于10	 所以有11个

总结x y z 取值的特征可得 假设值为xyz。 x,y,z=1
百位数个数:yz+1
十位数个数:x*10+z+1
个位数个数:xy+1

总结出一个规律(k==1)

[对于当前的某一位,假设该位上的数字为cur,该位之前的数字是high,该位后面是low, ( eg. 123456 如果cur = 4 ,则 high = 123 , low = 56 )

那么当前位上出现1 的次数是

(high+1)* 10 ( cur > 1 )

(high ) *10 + low+1 ( cur == 1)

(high ) *10 ( cur < 1 )
————————————————
版权声明:本文为CSDN博主「betwater」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
[原文链接](https://blog.csdn.net/betwater/article/details/52811441)

当1<=k<=9时 以上推论成立。
讨论k==0时,参照以上推论过程,即可。
代码参考:https://blog.csdn.net/betwater/article/details/52811441

讨论0的结论为:
设mxyz(m,x,y,z为大于0的数)
个位数:mxy
十位数:mx10
百位数:m
10*10

设mxyz(m,x,y,z为等于0的数)
个位数:mxy
十位数:(mx-1)*10+z+1
百位数:(m-1)1010 +yz +1
此java方法可为:

	public static int countZero(int n){
   	int count = 0;
   	int tmp =n;
   	int i=1;
   	int weight=tmp%10;
   	tmp/=10;
   	count += tmp;
   	while(tmp>0){
   		weight=tmp%10;
   		tmp/=10;
   		i*=10;
   		if(weight>0){
   			count += tmp*i;
   		}else if(weight==0){
   			count=count+(tmp-1)*i+(n%i)+1;
   			}
   	}
   	return count;
   }

如有错误,感谢指正。
有其他简便方法,求求大佬告诉我啊,推倒这个花了好久。【大哭啊!!】

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 14:55:44  更:2021-09-22 14:58:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 14:44:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码