本文仅供参考学习使用,谢谢

目录

  • 问题描述:
  • 思路分析:
  • 测试数据:
  • 代码

问题描述:

Alice和Bob来到古老的金字塔,发现古代法老留下的两个数a和b(a<b),传说如果能够在机关启动前 正确数出两个数字间 1 出现的次数,就可以得到法老的权杖。机会只有一次,你可以帮助他们么?(一个一个数肯定是来不及的。。。)

  • 输入:

a,b两个数

  • 输出:

两个数之间1出现的次数

思路分析:

除了0以外所有数字的出现次数都是这样计算,零不可以考虑最高位为0

  • 本题的思想是从最低位开始求1出现的次数。然后把所有位1出现的次数相加。

eg:n=12345,( n=abcde ) 例如要求百位为1的数字的个数。
一共分两步走。先求0~12299 中百位 为1的数字。再求12300~12345中百位为1的数字。

0~12299 中百位为1的形式如下: ab 1 cd ,ab可取得组合为0~(ab-1)一共ab种,
对于本例即 在百位的前半部分 可取(00,01,02,03……11),即一共有ab=n/(exp10)种取法,后半段可取的范围是(0,1,2,……99)一共exp种,其中exp代表当前位,此时求的是百位,因此exp=100. 所以在第一部分中 百位出现1的情况
即为 n/(exp
10) * (exp).

对于12300~12345中的部分。先确定百位上的数字是否为1,此时高位只能取ab.对于此案例只能取12.

  • 若百位为1. 则出现的数字为 00~de 共(ef+1)种。
  • 若百位大于1.则一共可取00~99 共exp种。
  • 若百位为0,没有数字满足条件。

测试数据:

  • 数据1:

8

  • 结果1:

13

  • 数据2:

428 1576

  • 结果2:

902

代码

#include <stdio.h>int workout(int n){if(n<=0)return 0;int e = 1;int ans = 0;while(n/e){// 求每一位上出现1 的数字的个数。  再把所有位出现1的个数相加,即可1出现的次数// n/(e*10)为对应位左边的取值情况,e为对应位右边的取值情况(0~-1)共e中取法ans = ans+n/(e*10)*e;if(n%(e*10)/e >1)//对应位> 1 的情况下,小于对应位的数为0~eans = ans + e;else if(n%(e*10)/e ==1)//对应位== 1的情况下,小于对应位的数为0~ n%eans = ans +n%e+1;e = e*10;}return ans;
}int main(int argc, const char * argv[]) {int a=0,b=0,end=0;scanf("%d%d",&a,&b);end=workout(b)-workout(a);printf("%d\n",end);return 0;
}

个人笔记:算法讲座2.1——法老的权杖(某数出现的频率)相关推荐

  1. 菜鸟学Linux 第044篇笔记 算法和私有CA

    菜鸟学Linux 第044篇笔记 算法和私有CA 证书吊销列表CRL(Certificate Revocation List ) 如何解决私钥丢失 PKI: Public Key Infrastruc ...

  2. 读书笔记 -- 算法入门

    14天阅读挑战赛 努力是为了不平庸~ 算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!欢迎记录下你的那些努力时刻(算法学习知识点/算法题解/遇到的算法bug/等等),在分享的同时加深对于算 ...

  3. 一致性哈希算法——算法解决的核心问题是当slot数发生变化时,能够尽量少的移动数据

    一致性哈希算法--算法解决的核心问题是当slot数发生变化时,能够尽量少的移动数据 参考文章: (1)一致性哈希算法--算法解决的核心问题是当slot数发生变化时,能够尽量少的移动数据 (2)http ...

  4. java回文数算法for_【Java】【每日算法/刷穿 LeetCode】9. 回文数(简单)

    首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]9. 回文数(简单) 宫水三叶发布于 今天 15:30 题目描述 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从 ...

  5. 双指针算法(三):力扣【167.两数之和 | 经典例题

    本文将讲述双指针算法的一个经典例题,167.两数之和 [题目描述] 给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target . 函数应该以长 ...

  6. 银行卡号校验位的LUHN算法模10“隔位2倍加”校验数的公式

    银联卡卡号由三部分组成:发卡机构标识码(bin).发卡机构自定义位.校验码.其中,卡号左起前六位是发卡机构标识代码(BIN),由6位数字组成.BIN号由中国银联复制分配.确认和管理:卡号第七位起事发卡 ...

  7. 分治算法求解列表中第k小的数

    分治算法地思想就是将复杂问题分解为简单的子问题,然后寻求子问题的地归结,并组合各个子问题的解一起得到最终复杂问题的解. 针对求解列表中第k小的数,暴力拆解法可以将列表排序然后根据索引求出列表中第k小的 ...

  8. 个人笔记:算法讲座3.4——货币系统(完全背包)

    本文仅供参考学习使用,谢谢 问题描述: Alice和Bob分属艾泽拉斯大陆上的两大对立阵营--部落与联盟,两大阵营的货币体系不同,但他们都可以在幽暗城使用铜币进行结算.铜币嘛,当然都一样.这天,Ali ...

  9. 个人笔记:算法讲座3.1——地精的帽子(最长上升子序列)

    本文仅供参考学习使用,谢谢 目录 问题描述: 分析思路: 算法描述: 测试数据: 问题描述: Alice和Bob抓住了一些地精,用魔法把它们栓在了一根长长的竹竿上,每个地精都戴着不同颜色的帽子,而且身 ...

最新文章

  1. matlab导入txt数据_如何正确的将txt文本数据导入到Word中使用?
  2. php怎么给接口里的方法传参,PHP接口中方法的参数和实现类方法中的参数可以不一致的问题...
  3. Java面试 - HashMap的底层实现,之后会问ConcurrentHashMap的底层实现
  4. MySQL Miscellaneous Functions(ip uuid方法)
  5. html5结构 客户端缓存,Javascript--离线应用与客户端储存
  6. mysql hang and srv_error_monitor_thread using 100% cpu(已解决)
  7. java中float double利用BigDecimal运算
  8. RedHat RealTime Kernel
  9. 开源人脸106关键点
  10. oracle知否有用coherence,Oracle Coherence概述
  11. 程序员,隐藏的段子手
  12. JETT(一)-Excel模板转换器简介
  13. CTF学习经验分享(Web方向)
  14. 服务器运营维护要多少钱,运营维护升级也需成本
  15. 传统企业线下收益不可观,问答营销是你线上引流的好方法
  16. ckfinder java 源码_Ckeditor与Ckfinder(java)整合实现富媒体内容编辑(支持文件上传)
  17. 智芯传感微差压气体压力传感器成功入围第三届“SIA感知领航优秀项目征集”年度杰出产品及技术成长型企业组
  18. FACIAL: Synthesizing Dynamic Talking Face with Implicit Attribute Learning 论文解读
  19. CDEC中国数字智能生态大会参会指南
  20. LeetCode4寻找两个有序数组的中位数(二分查找+分治)

热门文章

  1. 超神狙击游戏服务器维护中,超神狙击新手常见问题FAQ
  2. CH340在STM32实现一键下载电路的理解
  3. 成本中心通过利润中心来和公司代码对应
  4. 全球及中国润喉糖行业消费需求与品牌竞争动态研究报告2022-2028年
  5. php 图片 模糊,Word中插入图片模糊、不清晰的解决方法
  6. Android手机中获取手机号码和运营商信息
  7. AIOT OS设计思考
  8. IE和Firefox兼容性
  9. 为什么总是有人说 Java 啰嗦,却没人说 C++ 啰嗦?
  10. 关于MATLAB对已有数据的频谱分析及关心频率的幅值计算