清奇思路(六)从1到n整数中1出现的次数

2023-11-09 21:59
文章标签 次数 整数 思路 清奇

本文主要是介绍清奇思路(六)从1到n整数中1出现的次数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 1.题目描述
  • 2. 清奇思路:如何找数字规律判断每一位有几个“1”
    • 2.1 举例子找规律
      • 2.1.1百位为例,百位上至少有多少个“1”
      • 2.1.2 如果X>1(即X为2~9)
      • 2.1.3 如果X==0
      • 2.1.4 如果X==1
    • 2.2用公式写出来
    • 2.3代码表示

1.题目描述

  1. 1~13中包含1的数字有1、10、11、12、13,因此“1”共出现6次;
  2. 求出任意非负整数区间中1出现的次数。

首先需要说明的是:题目要求的是“1”的个数而不是含1的数字的个数,也就是说对于数字“11”,是有有两个“1”的。是要算两次的!!!!

2. 清奇思路:如何找数字规律判断每一位有几个“1”

牛客网该题目下咩咩jiang的回答由于没有图,字也挤在一起-_-||,原谅我第一次真的看不进去。
博客:yi_Afly的专栏中从1到n整数中1出现的次数图文并茂,讲解的很清楚,思路上和上面的大佬是相近的,建议先看yi_Afly的再回看咩咩jiang的,可能会稍稍好一些。


下面开始是我整理两位的发言,梳理的比较有逻辑一点。

2.1 举例子找规律

yi_Afly从个位开始讲解,但是最终仍然回归到一样的代码上去,因此本文这里先和咩咩jiang一样,以百位为例,说明如何计算,然后再说明为什么个位计算方法可以与百位的相同。

我们以数字          3 1 X 5 6                 为例  //X表示百位数字不定(0~9)均有可能

2.1.1百位为例,百位上至少有多少个“1”

这里写图片描述 我们用一个Round变量表示百位之前更高位所留存的数字。
那么,很明显可以知道,不管X是多少,在Round从0~30轮中,百位上有“1”的次数至少是31次,因为百位每一次出现“1”需要持续100次(100-199),因此百位上“1”的个数至少有 31100 31 ∗ 100

这个100是由于百位本身的特性决定的,因此如果我们记X所在的位权重为Base,如下图所示:
这里写图片描述
那么,百位上“1”至少出现的次数就是: RoundBase R o u n d ∗ B a s e .


2.1.2 如果X>1(即X为2~9)

这里我们应该也知道,在第32轮,也就是Round为31的时候,只有31100 - 31199百位上会出现“1”。
所以如果 X>1 X > 1 ,那就是看 100199 100 − 199 有多少个“1”。因此,如果X>1,百位上“1”的个数有 31100+1100 31 ∗ 100 + 1 ∗ 100

那么,此时百位上“1”出现的次数就是: (Round+1)Base ( R o u n d + 1 ) ∗ B a s e .

2.1.3 如果X==0

在第32轮,也就是Round为31的时候,只有31100 - 31199百位上会出现“1”。所以,如果 X==0 X == 0 ,那就是看 3100031056 31000 − 31056 有多少个“1”。很明显没有。

那么,此时百位上“1”出现的次数就是: (Round)Base ( R o u n d ) ∗ B a s e .

2.1.4 如果X==1

在第32轮,也就是Round为31的时候,只有31100 - 31199百位上会出现“1”。所以,如果 X==1 X == 1 ,那就是看 3110031156 31100 − 31156 有多少个“1”。取决于百位后面的数字是多少。
如果我们记百位后面的数字为Former,如图所示:
这里写图片描述
那么,此时百位上“1”出现的次数就是: (Round)Base+Former+1 ( R o u n d ) ∗ B a s e + F o r m e r + 1 .

2.2用公式写出来

1.Round=N/Base/10 1. R o u n d = N / B a s e / 10 的 商
2.Former=N/Base 2. F o r m e r = N / B a s e 的 余 数
百位上“1”出现的次数就是:
Round+ϵ(X1))Base+Former+1δ(X1) R o u n d + ϵ ( X − 1 ) ) ∗ B a s e + ( F o r m e r + 1 ) ∗ δ ( X − 1 )

其中, ϵ(X)δ(X) ϵ ( X ) 是 阶 跃 函 数 , δ ( X ) 是 冲 激 函 数

2.3代码表示

int NumberofOnes(int n)
{int count = 0;long long base = 1;for(base =1;base<=n;base*=10){int Round =  n/base;int X = Round%10;Round/=10;int Former = n%base;count=count+(Round*base+(X>1)*base+(Former+1)*(X==1))}return count;
}

当然,根据上述思路还有一些其他的代码表示,也很精妙,但是我个人觉得不如我这个来的直观。

最后说一说为什么个位也可以用,因为个位的Former为0。不会影响到个位整体计算公式的。

这篇关于清奇思路(六)从1到n整数中1出现的次数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/378685

相关文章

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

PTA求一批整数中出现最多的个位数字

作者 徐镜春 单位 浙江大学 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。 输出格式: 在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n

hdu 3065 AC自动机 匹配串编号以及出现次数

题意: 仍旧是天朝语题。 Input 第一行,一个整数N(1<=N<=1000),表示病毒特征码的个数。 接下来N行,每行表示一个病毒特征码,特征码字符串长度在1—50之间,并且只包含“英文大写字符”。任意两个病毒特征码,不会完全相同。 在这之后一行,表示“万恶之源”网站源码,源码字符串长度在2000000之内。字符串中字符都是ASCII码可见字符(不包括回车)。

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

三相直流无刷电机(BLDC)控制算法实现:BLDC有感启动算法思路分析

一枚从事路径规划算法、运动控制算法、BLDC/FOC电机控制算法、工控、物联网工程师,爱吃土豆。如有需要技术交流或者需要方案帮助、需求:以下为联系方式—V 方案1:通过霍尔传感器IO中断触发换相 1.1 整体执行思路 霍尔传感器U、V、W三相通过IO+EXIT中断的方式进行霍尔传感器数据的读取。将IO口配置为上升沿+下降沿中断触发的方式。当霍尔传感器信号发生发生信号的变化就会触发中断在中断

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python

如何打造个性化大学生线上聊天交友系统?Java SpringBoot Vue教程,2025最新设计思路

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 | SpringBoot/SSM Python实战项目 | Django 微信小程序/安卓实战项目 大数据实战项目 ⚡⚡文末获取源码 文章目录

单精度浮点数按存储格式转为整数的程序

///#include<cstdio>//-----------------union int_char{unsigned char ch[4];float i;};void out_put(union int_char x)//x86是小端对其模式,即最数据的最低位存储在地址的最低位上。{printf("单精度浮点数值为:%f\n",x.i,x.i);printf("存储位置从左到右