剑指offer 32 统计数字出现次数

SigFit实战:从FEA到光学仿真的热力耦合分析全流程解析 在光机系统与芯片封装等精密工程领域,热与力的耦合效应是影响产品性能与可靠性的核心物理问题。有限元分析(FEA)是预测结构在热、力载荷下变形与应力的基础工具,但其结果通常无法直接用于评估光学性能。这需要一座桥梁,将物理场数据转化为光学设计语言。其核心原理在于数据映射与面形表征技术,例如通过泽尼克多项式拟合,将离散的节点位移分解为离焦、像散等标准光学像差。这项技术的工程价值在于,它实现了多物理场仿真的闭环,使工程师能在设计阶段精准预测热变形或应力对波前误差、调制传递函数等关键光学指标的影响。其典型应用场景包括高 阅读详情

原文:http://www.cnblogs.com/cyjb/p/digitOccurrenceInRegion.html

描述

计算 1 至 n 中数字 X 出现的次数,其中  n≥1,X∈[0,9]。

解题思路

这是一道比较简单的题目,举个例子先:假设 n=11,X=1,那么就是求 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 这 11 个数字中 1 出现的次数,很容易能看出来结果为 4,在 1 和 10 中各出现了一次,在 11 中出现了两次。

1.最简单的办法就是依次遍历 1 至 n,再分别求每个数字中 X 出现的次数,复杂度O(nlogn)

2.一个更好的办法是利用数学公式直接计算出最终的结果,该方法是依次求出数字 X 在个位、十位、百位等等出现的次数,再相加得到最终结果。这里的 

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

首先要知道以下的规律:

  • 从 1 至 10,在它们的个位数中,任意的 X 都出现了 1 次。
  • 从 1 至 100,在它们的十位数中,任意的 X 都出现了 10 次。
  • 从 1 至 1000,在它们的千位数中,任意的 X 都出现了 100 次。

依此类推,从 1 至10^i中,右起第i 位)中,任意的 X 都出现了  10−1 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。

然后是十位。从 1 至 2500 中,包含了 25 个 100,因此任意的 X 都出现了  25×10=250 次。剩下的数字是从 2501 至 2593,它们最大的十位数字 9 > X,因此会包含全部 10 个 5。最后总计 250 + 10 = 260。

接下来是百位。从 1 至 2000 中,包含了 2 个 1000,因此任意的 X 都出现了 2×100=200 次。剩下的数字是从 2001 至 2593,它们最大的百位数字 5 == X,这时情况就略微复杂,它们的百位肯定是包含 5 的,但不会包含全部 100 个。如果把百位是 5 的数字列出来,是从 2500 至 2593,数字的个数与百位和十位数字相关,是 93+1 = 94。最后总计 200 + 94 = 294。

  1. 取第 
    i
     位左边(高位)的数字,乘以10^(i−1),得到基础值 a。
  2. 取第  i 位数字,计算修正值:
    1. 如果大于 X,则结果为 a+10^(i−1)。
    2. 如果小于 X,则结果为 a。
    3. 如果等 X,则取第  i 位右边(低位)数字,设为b,最后结果为a+b+1。 

#include <iostream>
using namespace std;
//x=0,1,2,3,4,5,6,7,8,9
int countNumber(int n,int x)
{
    int i,k,cnt=0;
    for(i=1;k=n/i;i*=10)
    {
        //高位=k/10
        int high=k/10;
        if(0==x)
        {
            if(high)--high;
            else break;
        }
        cnt+=high*i;
        int cur=k%10;
        if(cur>x)cnt+=i;
        //低位=n%i
        else if(cur==x)cnt+=(n%i+1);
    }
    if(x==0)cnt++;//个位上补足1
    return cnt;
}
int main()
{
    int n,x;
    while(cin>>n>>x)
    {
        cout<<countNumber(n,x)<<endl;
    }
    return 0;
}



2023华为od机试真题【恢复数字序列】C++ 2023华为od机试真题【恢复数字序列】C++ 对于一个连续正整数组成的序列,可以将其拼接成一个字符串,再将字符串里的部分字符打乱顺序。如序列8 9 10 11 12,拼接成的字符串为89101112,打乱一部分字符后得到90811211,原来的正整数10就被拆成了0和1。现给定一个按如上规则得到的打乱字符的字符串,请将其还原成连续正整数序列,并输出序列中最小的数字. 输入描述 阅读详情

相关推荐

zedboard(5)spi轮询和中断

一个SPI可以有几个从设备 在程序中使用 s32 XSpiPs_SetSlaveSelect(XSpiPs *InstancePtr, u8 SlaveSel) 选择。其实就是吧对应设备的ss拉低。 备注:只选一个ss,可以不用指定。(感觉,还没测试) 这是xspips.c中定义的函数,发送和接收有 XSpiPs_Transfer 和 XSpiPs_PolledTransfer 两个函数,分别采用中断和轮询模式。    一、轮询模式 米联客参考代码,SpiPs_Init中部分和官方例程流程一样,Spi

Kiss丶小坏 5889

整数中1出现的次数(从1到n整数中1出现的次数)

题目描述 求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。 思路1: 设N = abcde ,其中abcde分别为十进制中各位上的数字。 如果要计算百位上1出现的次数,它要受到3方面的影响:百位上的数字,百位以下(低位)的数字,百位以上(高位)的数字

growthmindset的博客 359

skywalking各项指标说明

skywalking各项指标说明

没有简介 2487

算法学习之整数中1出现的次数(从1到n整数中1出现的次数)

题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。 那种简单的嵌套双遍历这里就不讲了,说一下另一种思路,使用归纳法总结...

qq_35523678的博客 1263

模拟CMOS集成电路设计入门学习(1)

模拟CMOS集成电路设计入门学习(1):二级效应

qq_61052827的博客 3084

AI数字人:口播与唇形同步的福音,支持本地部署/批量生成/口齿清晰

你也可以直接输入语音,虚拟化身会根据语音的节奏和语调,同步做出相应的动作和表情,表现更加生动。不过这依然是个值得关注的工具。借助先进的 AI 算法,Heygem 高精度捕捉五官、轮廓等特征,构建逼真的虚拟模型。同时,它还能克隆语音,捕捉人声的细微特征,支持多种语音参数设置,打造高度相似的音色效果。打开设置,调整镜像存储位置,镜像文件比较大70~80G,选择合适的盘,设置完成后点击“Apply & Restart”。数字人视频画面与声音高度同步,口型匹配自然流畅,智能优化音视频效果,带来极佳的视听体验。

m0_72580657的博客 5861

整数中1出现的次数

整数中1出现的次数(从1到n整数中1出现的次数)

C_Trip的博客 434

NXP KW45开发实战:如何在MCUXpresso IDE中正确配置J-Link并解决设备识别问题

本文详细介绍了在MCUXpresso IDE中配置J-Link以支持NXP KW45无线MCU开发的实战指南。从环境准备到J-Link深度配置,再到烧录流程优化和高级调试技巧,帮助开发者高效解决设备识别问题并提升开发效率。特别推荐使用JLinkRemoteServer.exe进行多设备并行调试,并提供了烧录速度优化和低功耗调试的实用技巧。

gray5的博客 864

剑指offer-数组中数字出现的次数II (数位统计)

在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。 示例 1: 输入:nums = [3,4,3,3] 输出:4 示例 2: 输入:nums = [9,1,7,9,7,9,7] 输出:1 限制: 1 <= nums.length <= 10000 1 <= nums[i] < 2^31 来源:力扣(LeetCode) 链接...

Y先森0.0 863

如何通过 GitHub Actions 使用 SSH 自动化部署到阿里云 ECS 实例

通过 GitHub Actions 和 SSH 自动化部署,可以显著提高你的开发效率和部署的可靠性。本文介绍了如何生成 SSH 密钥、将公钥添加到阿里云 ECS 实例、将私钥添加到 GitHub Secrets,以及编写 GitHub Actions 工作流来实现自动化部署。希望这篇文章对你有所帮助!

吃面不喝汤的博客 1511

工业缺陷标注要人命?我从零搭了一套自动标注系统,标注效率直接提升10倍

你是不是也深陷工业缺陷标注的无尽内耗?这不是个例,工业视觉项目落地,80%的时间和成本,都耗在了数据标注环节。普通的图像标注(猫狗分类、人脸识别),标注门槛低、规则简单、一致性要求宽松;而工业缺陷标注,是CV领域公认的地狱级难度:缺陷尺寸小到几像素、种类繁杂且非标、行业专业性极强、标注精度要求到像素级、正负样本极度不均衡,人工标注不仅效率低、成本高,更直接决定了模型的最终上限。我在工业视觉行业摸爬滚打了6年,踩遍了人工标注的所有坑,最终从零搭建了一套工业缺陷专用的闭环自动标注系统,把原来一张图30分钟的标注

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 201

从1到n整数中1出现的次数:O(logn)算法

1. 题目描述输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,1一共出现了5次。2. 题目来源第一次看到是在《剑指Offer》第2版上,leetcode和牛客网上都有这道题。3. 本片博客的目的看了《剑指Offer》上的解法,我觉得不能算好: 这段解释描述有些不清晰,而且没有图,难以理解。 从书中给出的实现上来看,

yi_Afly的专栏 2万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

《剑指offer》66道算法题合集(java实现)

1

weixin_43774841的博客 2万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

剑指Offer面试题:32.数字在排序数组中出现的次数

一、题目:数字在排序数组中出现的次数 题目:统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4。 二、解题思路 2.1 直接运用二分查找   既然输入的数组是排序的,那么我们很自然地就能想到用二分查找算法。在题目给出的例子中,我们可以先用二分查找算法找到一个3。由于3可能出现多次,因此我们找到的3...

weixin_34060741的博客 160

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

剑指 Offer 56 - II. 数组中数字出现的次数 II

解题思路 剑指 Offer 56 - II. 数组中数字出现的次数 II 哈希表:把所有数字及其出现的次数存入哈希表,然后遍历哈希表找到次数为1的数字 位运算:统计数字中的各个位中1出现的次数,当为3n 次时,只出现一次的数字的对应位应当为0,当为3n + 1次时,只出现一次的数字的对应位应当为1。 代码 方法一:哈希表 import java.util.Map.Entry; class Solution { //方法一:哈希表:把所有数字及其出现的次数存入哈希表,然后遍历哈希表找到次数为1的数

weixin_43752710的博客 126

剑指Offer 56 - II. 数组中数字出现的次数 II(Medium)

剑指Offer 56 - II. 数组中数字出现的次数 II(Medium) 【题目链接】 题解 数组中数字出现的次数 II(位运算 + 有限状态自动机,清晰图解) 思路 代码 class Solution: ### 1012 统计数字出现次数(2156 ms,14.8 MB) def singleNumber(self, nums: List[int]) -> int: candi_dict = {} gt1_ls = []

newCraftsman的博客 209

【剑指Offer面试题】 九度OJ1373:整数中1出现的次数(从1到n整数中1出现的次数)

题目链接地址: http://ac.jobdu.com/problem.php?pid=1373题目1373:整数中1出现的次数(从1到n整数中1出现的次数)时间限制:1 秒内存限制:32 兆特殊判题:否提交:1988解决:501 题目描述: 亲们!!我们的外国友人YZ这几天总是睡不好,初中奥数里有一个题目一直困扰着他,特此他向JOBDU发来求助信,希望亲们能帮帮他。问题是:求出1~13的整

牧之 1267

39_剑指offer_java_数组中出现次数超过数组长度一半的数字

题目描述 数组中有一个数组出现的次数超过数组长度的一半,请找出这个数字。例如,输入一个长度为9的数组{1, 2, 3, 2, 2, 2, 5, 4, 2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 测试用例 功能测试(输入的数组中存在一个出现次数超过数组长度一半的数字;输入的数组中不存在一个出现次数超过数组长度一半的数字) 特殊输入测试(输入...

Longtermevolution的博客 247

剑指offer面试题56:数组中数字出现的次数(golang实现)

题目描述 该类题目书中共有两题,以下为题目描述: 输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。 Leetcode55-I:二叉树的深度 2.输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。 Leetcode55-II:平衡二叉树 算法分析 求二叉树的深度一般采用递归实现 第一题直接要求二叉树的深度,易知二叉树的深度等于左子树的深度和右子树

weixin_45693198的博客 420

shell最大出现和连续出现次数_31. 整数中1出现的次数(从1到n整数中1出现的次数)(剑指offer)...

31. 整数中1出现的次数(从1到n整数中1出现的次数) 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,1一共出现了5次。1、思路 两种方法,一种是从1到n遍历,每次通过对10求余数判断整数的个位数字是不是1,大于10的除以10之后再判断。我们对每个数字都要做除法和求余运算以求出该数...

weixin_26716079的博客 180

【剑指Offer】位运算

1、二进制中 1 的个数 public class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { int cnt = 0; while(n !=0){ n &= (n-1); cnt++; } return cnt; } } 2、数组

历乱的日记簿 115

剑指offer笔记

文章目录01赋值运算符函数02单例模式03找一维数组04二维数组查找05替换字符串的空格06从尾开始输出单向链表07前序和中序构建二叉树08找出中序遍历的下一个节点09两个栈实现队列09队列如何实现栈10斐波那契数列11partition函数11快速排序11数字限定在较小范围内的0(n)方法排序11旋转数组的最小数字12矩阵中的路径13机器人的运动范围14动态规划14贪婪算法14剪绳子15.位运算...

Junekiler的博客 751

【剑指offer 面试题38】数字在排序数组中出现的次数

思路:   利用二分查找,分别查找待统计数字的头和尾的下标,最后做差加一即为结果。 C++: 1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 5 int GetFirstK(vector<int>& nums, int startpos, ...

weixin_30518397的博客 68

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

1. 题目描述 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,1一共出现了5次。 2. 题目来源 第一次看到是在《剑指Offer》第2版上,面试题32。leetcode和牛客网上都有这道题。 3. 本文的目的 看了《剑指Offer》上的解法,我觉得不能算好: 这段解释描述有些

垚的博客 354

剑指 Offer II 004. 只出现一次的数字

输入一个整数数组,数组中只有一个数字出现了一次,而其他数字都出现了3次。请找出那个只出现一次的数字。例如,如果输入的数组为[0,1,0,1,0,1,100],则只出现一次的数字是100。

絮语流年的博客 413

剑指offer 二进制中1的个数 C++

题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 解答 class Solution { public: int NumberOf1(int n) { int count=0; unsigned int flag=1; while(flag) { if(n &am...

Hunter的博客 362
上一篇: 剑指offer-53字符串正则表达式匹配
下一篇: 剑指offer 28字符串全排列
WayToAccept
博客等级 码龄14年 21粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值