《剑指offer》第四十四题(数字序列中某一位的数字)
// 面试题44:数字序列中某一位的数字
// 题目:数字以0123456789101112131415…的格式序列化到一个字符序列中。在这
// 个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一
// 个函数求任意位对应的数字。 #include <iostream>
#include <algorithm> using namespace std; int countOfIntegers(int digits);
int digitAtIndex(int index, int digits);
int beginNumber(int digits); int digitAtIndex(int index)//查找index位置的值
{
if (index < )//判断无效输入
return -; int digits = ;
while (true)
{
int numbers = countOfIntegers(digits);//digits位的最多个数
if (index < numbers * digits)
return digitAtIndex(index, digits);//若在这个范围内,就开始查找 index -= digits * numbers;//减去digits位的最多个数,在下一个digits+1位范围内查找
digits++;
} return -;
} int countOfIntegers(int digits)//digits位的最多个数
{
if (digits == )
return ; int count = (int)std::pow(, digits - );
return * count;
} int digitAtIndex(int index, int digits)//函数重载,index在digits位内的位置
{
int number = beginNumber(digits) + index / digits;//找到要落在的那个数值
int indexFromRight = digits - index % digits;//计算从右看过位置
for (int i = ; i < indexFromRight; ++i)//这个牛批,这是计算落在的那个字符,注意i=1
number /= ;
return number % ;//要用余数才可以得到
} int beginNumber(int digits)//digits位的初始值
{
if (digits == )
return ; return (int)std::pow(, digits - );
} // ====================测试代码====================
void test(const char* testName, int inputIndex, int expectedOutput)
{
if (digitAtIndex(inputIndex) == expectedOutput)
cout << testName << " passed." << endl;
else
cout << testName << " FAILED." << endl;
} int main()
{
test("Test1", , );
test("Test2", , );
test("Test3", , );
test("Test4", , );
test("Test5", , ); // 数字99的最后一位,9
test("Test6", , ); // 数字100的第一位,1
test("Test7", , ); // 数字370的第一位,3
test("Test8", , ); // 数字370的第二位,7
test("Test9", , ); // 数字370的第三位,0
system("pause");
return ;
}
《剑指offer》第四十四题(数字序列中某一位的数字)的更多相关文章
- 剑指Offer(二十八):数组中出现次数超过一半的数字
剑指Offer(二十八):数组中出现次数超过一半的数字 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn. ...
- 《剑指offer》第二十二题(链表中倒数第k个结点)
// 面试题22:链表中倒数第k个结点 // 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯, // 本题从1开始计数,即链表的尾结点是倒数第1个结点.例如一个链表有6个结点, ...
- 《剑指offer》第十二题(矩阵中的路径)
// 面试题:矩阵中的路径 // 题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有 // 字符的路径.路径可以从矩阵中任意一格开始,每一步可以在矩阵中向左.右. // 上.下移动 ...
- 剑指offer——python【第28题】数组 中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- 剑指Offer(三十四):第一个只出现一次的字符
剑指Offer(三十四):第一个只出现一次的字符 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net ...
- 剑指Offer(二十四):二叉树中和为某一值的路径
剑指Offer(二十四):二叉树中和为某一值的路径 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...
- 剑指Offer(三十五):数组中的逆序对
剑指Offer(三十五):数组中的逆序对 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/bai ...
- 剑指 Offer 44. 数字序列中某一位的数字 + 找规律 + 数位
剑指 Offer 44. 数字序列中某一位的数字 Offer_44 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author Wale ...
- 【Offer】[44] 【数字序列中某一位的数字】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 数字以0123456789101112131415..的格式序列化到一个字符序列中.在这个序列中,第5位(从0开始计数)是5,第13位是 ...
- 《剑指offer》第十四题(剪绳子)
// 面试题:剪绳子 // 题目:给你一根长度为n绳子,请把绳子剪成m段(m.n都是整数,n>1并且m≥1). // 每段的绳子的长度记为k[0].k[1].…….k[m].k[0]*k[1]* ...
随机推荐
- Oracle之表的相关操作
#添加字段 格式: alter table table_name add column_name datatype; 例子: alter table userinfo ); desc userinfo ...
- mysql 通过查看mysql 配置参数、状态来优化你的mysql
我把MYISAM改成了INNODB,数据库对CPU方面的占用变小很多' mysql的监控方法大致分为两类: 1.连接到mysql数据库内部,使用show status,show variables,f ...
- P2763 试题库问题(dinic)
P2763 试题库问题 dinic 搞个虚拟源点和汇点,瞎建建边就好辣. 偷张图↓↓ 如果没满流就是无解辣 输出方案咋办呢? 枚举每种类型,蓝后枚举它们的边 如果该边被使用了(通过判断反向边的流量), ...
- The POM for XXX is invalid, transitive dependencies (if any) will not be available解决方案
今天,某个开发的环境在编译的时候提示警告The POM for XXX is invalid, transitive dependencies (if any) will not be availab ...
- 这五件事,二次SaaS创业的老炮儿都在做(转)
在我看来,我们现在正处在SaaS公司发展过程中的第三代.第一代SaaS公司有Salesforce.Netsuite和Webex等.紧接着兴起的第二代SaaS公司大多都是利用Salesforce或其他网 ...
- Linux普通用户使用sudo免输密码(Debian/Redhat通用)
今天使用的Debian,由于使用的是普通用户,而使用的sudo都需要输入密码的繁琐操作, 下面是使用sudo时免输入密码. 需要管理员权限进行以下操作. 修改sudoers vim /etc/sudo ...
- 20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础
20155201 李卓雯 <网络对抗技术>实验一 逆向及Bof基础 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,f ...
- Java基础语法(上)
Java编译报错出现非法字符,原因是存在中文字符. Java关键字的字母都是小写. Java是一种强类型语言,针对每一种数据都给出了明确的数据类型. 数据类型分类: A:基本数据类型 B:引用数据类型 ...
- Codeforces 37D Lesson Timetable - 组合数学 - 动态规划
题目传送门 神奇的门I 神奇的门II 题目大意 有$n$组学生要上课2次课,有$m$个教室,编号为$1$到$m$.要确定有多少种不同的安排上课的教室的方案(每组学生都是本质不同的),使得它们满足: 每 ...
- tr 命令用法
tr a. 替换全部字符 [root@bogon scripts]# tr [a-z] [A-Z] < /etc/fstab 将读出的结果全部替换成大写字母 (取一行作为展示效果) ...