个人笔记:算法讲座2.1——法老的权杖(某数出现的频率)
本文仅供参考学习使用,谢谢
目录
- 问题描述:
- 思路分析:
- 测试数据:
- 代码
问题描述:
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/(exp10) * (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——法老的权杖(某数出现的频率)相关推荐
- 菜鸟学Linux 第044篇笔记 算法和私有CA
菜鸟学Linux 第044篇笔记 算法和私有CA 证书吊销列表CRL(Certificate Revocation List ) 如何解决私钥丢失 PKI: Public Key Infrastruc ...
- 读书笔记 -- 算法入门
14天阅读挑战赛 努力是为了不平庸~ 算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!欢迎记录下你的那些努力时刻(算法学习知识点/算法题解/遇到的算法bug/等等),在分享的同时加深对于算 ...
- 一致性哈希算法——算法解决的核心问题是当slot数发生变化时,能够尽量少的移动数据
一致性哈希算法--算法解决的核心问题是当slot数发生变化时,能够尽量少的移动数据 参考文章: (1)一致性哈希算法--算法解决的核心问题是当slot数发生变化时,能够尽量少的移动数据 (2)http ...
- java回文数算法for_【Java】【每日算法/刷穿 LeetCode】9. 回文数(简单)
首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]9. 回文数(简单) 宫水三叶发布于 今天 15:30 题目描述 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从 ...
- 双指针算法(三):力扣【167.两数之和 | 经典例题
本文将讲述双指针算法的一个经典例题,167.两数之和 [题目描述] 给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target . 函数应该以长 ...
- 银行卡号校验位的LUHN算法模10“隔位2倍加”校验数的公式
银联卡卡号由三部分组成:发卡机构标识码(bin).发卡机构自定义位.校验码.其中,卡号左起前六位是发卡机构标识代码(BIN),由6位数字组成.BIN号由中国银联复制分配.确认和管理:卡号第七位起事发卡 ...
- 分治算法求解列表中第k小的数
分治算法地思想就是将复杂问题分解为简单的子问题,然后寻求子问题的地归结,并组合各个子问题的解一起得到最终复杂问题的解. 针对求解列表中第k小的数,暴力拆解法可以将列表排序然后根据索引求出列表中第k小的 ...
- 个人笔记:算法讲座3.4——货币系统(完全背包)
本文仅供参考学习使用,谢谢 问题描述: Alice和Bob分属艾泽拉斯大陆上的两大对立阵营--部落与联盟,两大阵营的货币体系不同,但他们都可以在幽暗城使用铜币进行结算.铜币嘛,当然都一样.这天,Ali ...
- 个人笔记:算法讲座3.1——地精的帽子(最长上升子序列)
本文仅供参考学习使用,谢谢 目录 问题描述: 分析思路: 算法描述: 测试数据: 问题描述: Alice和Bob抓住了一些地精,用魔法把它们栓在了一根长长的竹竿上,每个地精都戴着不同颜色的帽子,而且身 ...
最新文章
- matlab导入txt数据_如何正确的将txt文本数据导入到Word中使用?
- php怎么给接口里的方法传参,PHP接口中方法的参数和实现类方法中的参数可以不一致的问题...
- Java面试 - HashMap的底层实现,之后会问ConcurrentHashMap的底层实现
- MySQL Miscellaneous Functions(ip uuid方法)
- html5结构 客户端缓存,Javascript--离线应用与客户端储存
- mysql hang and srv_error_monitor_thread using 100% cpu(已解决)
- java中float double利用BigDecimal运算
- RedHat RealTime Kernel
- 开源人脸106关键点
- oracle知否有用coherence,Oracle Coherence概述
- 程序员,隐藏的段子手
- JETT(一)-Excel模板转换器简介
- CTF学习经验分享(Web方向)
- 服务器运营维护要多少钱,运营维护升级也需成本
- 传统企业线下收益不可观,问答营销是你线上引流的好方法
- ckfinder java 源码_Ckeditor与Ckfinder(java)整合实现富媒体内容编辑(支持文件上传)
- 智芯传感微差压气体压力传感器成功入围第三届“SIA感知领航优秀项目征集”年度杰出产品及技术成长型企业组
- FACIAL: Synthesizing Dynamic Talking Face with Implicit Attribute Learning 论文解读
- CDEC中国数字智能生态大会参会指南
- LeetCode4寻找两个有序数组的中位数(二分查找+分治)