整数中X出现的次数

整数中1出现的次数(从1到n整数中1出现的次数)--数学规律法 一、1的数目编程之美上给出的规律: 1. 如果第i位(自右至左,从1开始标号)上的数字为0,则第i位可能出现1的次数由更高位决定(若没有高位,视高位为0),等于更高位数字X当前位数的权重10i-1。 2. 如果第i位上的数字为1,则第i位上可能出现1的次数不仅受更高位影响,还受低位影响(若没有低位,视低位为0),等于更高位数字X当前位数的权重10i-1+(低位数字+1)。 3. 如果第i位上的 阅读详情
题目

求出任意非负整数区间[0,n]中X出现的次数(X等于0~9)。例如:0~13中包含1的数字有1、10、11、12、13因此共出现6次。


截取自牛客网中网友回答
https://www.nowcoder.com/questionTerminal/bd7f978302044eee894445e244c7eee6

@nailperry

参考博文:http://www.cnblogs.com/nailperry/p/4752987.html,
主要就是从数字出发找规律。
一、1的数目
编程之美上给出的规律:

  1. 如果第i位(自右至左,从1开始标号)上的数字为0,则第i位可能出现1的次数由更高位决定(若没有高位,视高位为0),等于更高位数字X当前位数的权重10i-1。

  2. 如果第i位上的数字为1,则第i位上可能出现1的次数不仅受更高位影响,还受低位影响(若没有低位,视低位为0),等于更高位数字X当前位数的权重10i-1+(低位数字+1)。

  3. 如果第i位上的数字大于1,则第i位上可能出现1的次数仅由更高位决定(若没有高位,视高位为0),等于(更高位数字+1)X当前位数的权重10i-1。

二、X的数目

这里的 X∈[1,9] ,因为 X=0 不符合下列规律,需要单独计算。

首先要知道以下的规律:

从 1 至 10,在它们的个位数中,任意的 X 都出现了 1 次。
从 1 至 100,在它们的十位数中,任意的 X 都出现了 10 次。
从 1 至 1000,在它们的百位数中,任意的 X 都出现了 100 次。
依此类推,从 1 至 10 i ,在它们的左数第二位(右数第 i 位)中,任意的 X 都出现了 10 i−1 次。

这个规律很容易验证,这里不再多做说明。

接下来以 n=2593,X=5 为例来解释如何得到数学公式。从 1 至 2593 中,数字 5 总计出现了 813 次,其中有 259 次出现在个位,260 次出现在十位,294 次出现在百位,0 次出现在千位。

现在依次分析这些数据,首先是个位。从 1 至 2590 中,包含了 259 个 10,因此任意的 X 都出现了 259 次。最后剩余的三个数 2591, 2592 和 2593,因为它们最大的个位数字 3 < X,因此不会包含任何 5。(也可以这么看,3 < X,则个位上可能出现的X的次数仅由更高位决定,等于更高位数字(259)X101-1=259)。

然后是十位。从 1 至 2500 中,包含了 25 个 100,因此任意的 X 都出现了 25×10=250 次。剩下的数字是从 2501 至 2593,它们最大的十位数字 9 > X,因此会包含全部 10 个 5。最后总计 250 + 10 = 260。(也可以这么看,9>X,则十位上可能出现的X的次数仅由更高位决定,等于更高位数字(25+1)X102-1=260)。

接下来是百位。从 1 至 2000 中,包含了 2 个 1000,因此任意的 X 都出现了 2×100=200 次。剩下的数字是从 2001 至 2593,它们最大的百位数字 5 == X,这时情况就略微复杂,它们的百位肯定是包含 5 的,但不会包含全部 100 个。如果把百位是 5 的数字列出来,是从 2500 至 2593,数字的个数与百位和十位数字相关,是 93+1 = 94。最后总计 200 + 94 = 294。(也可以这么看,5==X,则百位上可能出现X的次数不仅受更高位影响,还受低位影响,等于更高位数字(2)X103-1+(93+1)=294)。

最后是千位。现在已经没有更高位,因此直接看最大的千位数字 2 < X,所以不会包含任何 5。(也可以这么看,2 < X,则千位上可能出现的X的次数仅由更高位决定,等于更高位数字(0)X104-1=0)。

到此为止,已经计算出全部数字 5 的出现次数。


如果X∈[1,9]

public int numberOf1Between1AndN_Solution(int n, int x) {
    //总数
    int count = 0;
    //高位
    int high=n;
    //位数
    int i=1;
    //当前位
    int current=0;
    //低位
    int low=0;
    //中间值
    int temp=0;

    while(high>0) {
        //分别获取高位,当前位,低位
        high=n/(int)Math.pow(10,i);
        temp=n%(int)Math.pow(10,i);
        current=temp/(int)Math.pow(10,i-1);
        low=temp%(int)Math.pow(10,i-1);

        //分三种情况计算
        if(current==x){
            count+=(low+1)+high*(int)Math.pow(10,i-1);
        }else if(current>x){
            count+=(high+1)*(int)Math.pow(10,i-1);
        }else if(current<x){
            count+=high*(int)Math.pow(10,i-1);
        }
        i++;
    }
    return count;
}

若X=0,思路一致,不同在于需要考虑到数字不能以0开头

public int zeroOf1Between1AndN_Solution(int n) {
    //别漏了0,count至少为1
    int count = 1;
    int high=n;
    int i=1;
    int current=0;
    int low=0;
    int temp=0;

    while(high>0) {
        high=n/(int)Math.pow(10,i);
        temp=n%(int)Math.pow(10,i);
        current=temp/(int)Math.pow(10,i-1);
        low=temp%(int)Math.pow(10,i-1);

        if(current==0){
            count+=(high-1)*(int)Math.pow(10,i-1)+low+1;
        }else{
            count+=high*(int)Math.pow(10,i-1);
        }
        i++;
    }
    return count;
}
Python 实现获取 1 到 n 所有整数中,x (0 ≤ x ≤ 9)出现的次数 Python算法 阅读详情

相关推荐

海康工业相机LabVIEW二次开发实战——参数配置优化与图像高效存储

本文详细介绍了海康工业相机在LabVIEW平台上的二次开发实战,重点解析了相机参数配置的优化方法与图像高效存储策略。通过剖析曝光、增益、触发模式等核心参数的设置逻辑,并结合生产者-消费者设计模式,指导开发者构建稳定、高效的图像采集与异步存储流程,有效提升工业视觉项目的开发效率与系统稳定性。

weixin_29306317的博客 221

计数问题(python)

计数问题题目

weixin_40317570的博客 1246

基于TI C2000的CCS安装与工程创建完整示例

手把手演示基于TI C2000系列的CCS安装过程及首个工程创建步骤,涵盖环境配置与常见问题处理,助力快速上手嵌入式开发,ccs安装和工程搭建不再难。

weixin_42476987的博客 967

1到n中x出现的次数一类题(一网打尽)

首先我们来看1到n中1次数的次数 对应letecode链接: https://leetcode-cn.com/problems/1nzheng-shu-zhong-1chu-xian-de-ci-shu-lcof/ 题目描述: 输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。 例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。 示例 1: 输入:n = 12 输出:5 示例 2: 输入:n = 13 输出:6 限制: ..

qq_56999918的博客 1577

教程 | 基于遥感生态指数(RSEI)模型的生态环境质量评价

使用数据:Landsat8 OLI数据,行列号:122036,时间:20210527。 使用软件:ENVI5.3、ArcGIS10.2 二、4个指数计算 下述的四个指数的计算均是通过ENVI软件中的Band math工具进行计算。 (1)绿度指数 在常用的植被指数当中,归一化植被指数 ( NDVI) 能够有效地反映植被的生长情况与植被 覆盖度等重要植被的物理性质,检测灵敏度高,能 够较为真实地展现区域的地表空间变化规律,已经得到广泛利用,本文采用 NDVI 指数来代表绿度指数。 在ENV

YW_remote的博客 1万+

Nacos2.X 源码分析:为订阅方推送、服务健康检查、集群数据同步、grpc客户端服务端初始化

而Nacos2.X 从http请求改为了grpc请求的方式了,在健康检查这方面就是基于长连接来实现的。客户端发送心跳是在构建grpc连接时会有一个线程每隔5s发送一次,NacosClient端发送心跳的代码在。我们能大致猜测:当一个服务的实例进行了更新,那么是不是应该推送给所有订阅了该服务的客户端?当我订阅了某个服务,是不是应该将该服务信息推送给我?在服务实例检查检查流程中,如果出现了要注销的服务实例就会发布。在服务发现时,进行订阅服务的最后会发布一个。服务注册与服务订阅流程中发布的事件最终会被。

qq_44027353的博客 1593

Python练习:从1到n整数中1出现的次数

《剑指Offer》,面试题32的题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。 例如输入12,从1到12这些整数中包含1的数字有1、10、11和12,所以1一共出现了5次。 思路分析 1位数,1~9中,1一共出现了1次; 2位数,10~99中,10-19的十位上一共出现了 10*1=10 次,对于每个十位开头的数字 10~19、20~29,每个数个位上出现的是1-9中1出现的次数,共有9个区间 9*1=9 次; 3位数,100~999,100~199 百位上出现了 1.

薰衣草PK向日葵的博客 3874

RK3568移植AP6256

本文主要是记录RK3568移植正基的AP6256的WIFIBT模块,感兴趣的朋友可以一起学习!!!提示:以下是本篇文章正文内容,下面案例可供参考。

qq_24093081的博客 3715

Amazon SES 移出沙盒完整指南 & 高通过率模板

AWS SES沙盒模式转正式模式申请指南 申请正式模式需通过AWS审核,常见被拒原因包括邮件用途不清晰、缺少退订机制或发送量不合理。人工申诉需登录AWS Support Center提交服务限额提升请求,填写详细的公司信息、邮件用途及合规措施。 高通过率申诉模板需包含: 公司信息:名称、网址及与AWS的合作情况。 邮件规范:明确类型(交易/营销)、退订链接及退信处理机制。 发送计划:合理预估发送量,确保合规。 关键点:真实信息、用途清晰、退订机制完善、发送量合理。首次被拒可修改后重新提交。

xianyinsuifeng的博客 327

Arduino ESP32S3开发环境搭建 ------ 在线下载安装包Failed解决方案

本文介绍了Arduino ESP32 S3开发环境搭建的离线解决方案。

张一西的博客 1018

整数中x出现的次数(1-n中x出现的次数)

整数中x出现的次数 码文不易,如果帮助到您,希望您可以下载一个压缩包,与您无害,与我有益谢谢支持原创   欢迎大家阅读我的博客,如果有错误请指正,有问题请提问,我会尽我全力改正错误回答问题。在次谢谢大家。 码文不易,如果帮助到您,希望您可以下载一个压缩包,与您无害,与我有益谢谢支持原创 实验环境 语言c/c++ 编译器devc++5.11/5.40 ...

Paradox 1476

uniapp [全端兼容] - 详细实现集成接入萤石云摄像头监控示例代码,页面单个或多个九宫格监控画面同时监控播放推流(视频控制方向上下左右移动/调节音量声音/全屏/截屏录制/回放/对讲/切换清晰度)

uni-app,h5移动端网页,小程序,安卓,苹果ios,app,nvue,EZVIZ萤石,uniapp萤石云摄像头监控,uniApp项目集成萤石云详细示例代码,Uniapp中使用萤石云播放视频,使用萤石云播放视频,萤石云实现多窗口监控,展示多个监控画面同时播放,ezuikit.js,云台控制左右移动,莹石摄像头直播视频,萤石视频回放,摄像头黑屏不显示,加载慢报错出错,多个摄像头宫格布局,niapp萤石云视频监控对接,实现海康萤石直播预览、回放、云台控制功能,如何利用萤石实现直播推流回流,实时监控播放,监控

🏆 前端领域优质创作者 1万+

整数中X出现的次数(C++)

题目: 对于给定的n,求出1-n范围内X出现的次数。(0 思路: 这道题nlogn的算法很容易想到。 遍历1-n的每个数,判断每个数的每一位是否为1,计数即可。 下面直接给出代码: #include using namespace std; int NumberOf1Between1AndN(int n, int x) { int cnt = 0; for(int

decode 2228

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

1到n的正整数x出现的次数

【题目】输入一个整数n,求从1到n这n个正数中,x出现的次数。x是1,2,...,9中任意一个。 例如:输入12,x=1,出现一的数字有1,10,11,12共有5个1,则输出5。 输入12,x=2,出现一的数字有2,12共有2个2,则输出2。 输入12,x=3,出现一的数字有3共有1个3,则输出1。 【分析】 网络上流传很广的一道题和它很像:输入一个整数n,求从1到n这n个正数中,1出现

penngrove的专栏 2979

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

从1到n整数x出现的次数

/* * 统计1到n的整数中x(x可以是1~9的数)出现的次数 */ #include using namespace std; int solve(unsigned int n, int x); /* 根据数字规律,效率较高的算法实现 */ int solve2(unsigned int n, int x); /* 遍历所有整数的实现,n较大时极端低效 */ int m

花念雪 797

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

32-从1到n整数中X出现的次数

链接:https://www.nowcoder.com/questionTerminal/bd7f978302044eee894445e244c7eee6 来源:牛客网 参考博文:http://www.cnblogs.com/nailperry/p/4752987.html,主要就是从数字出发找规律。 一、1的数目 编程之美上给出的规律: 1. 如果第i位(自右至左,从1开始标号)上

leechow007的博客 391

整数中x出现的次数

求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。 通过使用位数乘法器m,值为1,10,100,1000等等,通过数字位置。 对于每个位置,将...

253

C++ 100~n之间的所有整数,数字x共出现的次数

C++ 2024年信息素养大赛真题

xzal12的博客 709

整数1~N中1出现的次数 整数0~N中 ’X‘(0~9) 出现的次数

1~N 整数中 1 出现的次数 0~N 整数中 X(0~9) 出现的次数

Mars_rangers的博客 114

C++ 输入两个整数n和x,求x在n中出现的次数

例:输入30,2 输出13 解题思路:for循环+递归函数 #include <iostream> #include <string> using namespace std; int i=0; void count2(int a,int x) { if(a%10==x) { i++; } int b=(a-a%10)/10 ; if(b>10) { count2(b,x); } if(b==x) { i++; } } void co

tiegenZ的博客 1554

[剑指offer] --32.整数中x出现的次数(从1到n整数中x出现的次数)

题目描述 求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。 public class Solution { public int ...

我在阴山下 283

1-n的整数中x出现的次数

求从1-n的整数中间,x出现的次数 例如:n=13,x=1,求1-13(包括1和13)中1出现的次数 1、10、11、12、13一共出现6次

H0_0P的博客 946

给定n个整数的数组A以及一个数x,设计一个分治算法,求出x在数组中出现的次数

执行代码: #include<stdio.h> int Countx(int arr[],int p,int r,int x){ int q; if(p==r){ //1个数据 if(arr[p]==x) return 1; else return 0; } else //多个数据 q=(p+r)/2; return(Countx(arr,p,q,x)+Countx(arr,q+1,r,x)); //递归方程 } int main()

weixin_51098806的博客 3418
上一篇: 动态规划:连续子数组的最大和
下一篇: Redis要点记录
HamalAlpha
博客等级 码龄11年 5粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值