`

【100题】第三十 求从1到n这n个整数的十进制表示中1出现的次数

 
阅读更多

一,题目:输入一个整数n,求从1nn个整数的十进制表示中1出现的次数。

例如输入n=12,从112这些整数中包含1 的数字有11011121一共出现了5次。


二,分析:这是一道广为流传的google面试题。

我们每次判断整数的个位数字是不是1。如果这个数字大于10,除以10之后再判断个位数字是不是1


三,源码


这个思路有一个非常明显的缺点就是每个数字都要计算1在该数字中出现的次数,因此时间复杂度是O(n)
当输入的n非常大的时候,需要大量的计算,运算效率很低。

下面是一个我看不懂的思路

char num[16];

int len, dp[16][16][2];

int dfs(int pos, int ct, int less)
{
if (pos == len)

return ct;
int &ret = dp[pos][ct][less];
if (ret != -1)

return ret;

ret = 0;
for (int d = 0; d <= (less ? 9 : num[pos] - '0'); d++)
ret += dfs(pos + 1, ct + (d == 1), less || d < num[pos] - '0');

return ret;
}

int NumOf1(int n)
{
sprintf(num, "%d", n);
len = strlen(num);
memset(dp, 0xff, sizeof(dp));
return dfs(0, 0, 0);
}

分享到:
评论

相关推荐

    统计数字问题一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1,2,…,9。

    编程任务:给定表示书的总页码的10 进制整数n (1≤n≤10^9) 。编程计算书的全部页码中分别用到多少次数字0,1,2,…,9。 Input 每个输入只有1 行,给出表示书的总页码的整数n。 Output 程序运行结束时,输出有...

    C++求1到n中1出现的次数以及数的二进制表示中1的个数

    这个问题要求我们计算从1到n的所有整数中,数字1作为十进制表示的一部分总共出现了多少次。例如,当n=12时,1出现在1、10、11和12这四个数字中,总共出现了5次。 **解法一**: 这是一个直观的方法,通过遍历1到n的...

    汇编语言 20个练习题目 代码加实验报告

    5.18 把0~100D之间的30个数存入以GRADE为首地址的30个字数组中,GRADE+i表示学号i+1的学生的成绩。另一个数组RANK为30个学生的名次表,其中RANK+i的内容是学号为i+1的学生的名次。编写一程序,根据GRADE中的学生成绩...

    浙江大学C语言上机练习题附答案

    20062 求m*m+1/m+(m+1)*(m+1)+1/(m+1)+(m+2)*(m+2)+1/(m+2)+......+n*n+1/n 13 20063 求1-2/3+3/5-4/7+5/9-6/11+…… 14 20064 求2^1+2^2+2^3+……+2^n 15 第4周(M4) 15 10007 显示图案 (复习...

    上海电机学院C语言实训答案

    说明:输入的第1个数表示学生人数(n=9),接着输入的9个成绩中,累加和为628.5(所有小数均保留一位小数输出),平均分为69.8分;平均分以上(A档)有4人,占44.4%,平均分以下(B档)有5人,占55.6%;A档的最低...

    NOI 2013 江苏省组队第二轮选拔赛

    - 共输出`Q`行,每行一个整数,表示对应代码片段在完整代码中出现的次数。 **样例说明**: - 样例1:两段代码完全相同,仅变量名不同,故出现次数为1次。 - 样例2:完整代码`cDEcDEbDE`中,代码片段`aDEbDE`出现了1...

    大整数相加,计算两个非负整数的和,可以精确计算2的100次方

    例如,可以用一个数组存储2的100次方,该值有30个十进制位,远远超过了普通整型所能表示的范围。 2. **进位机制**:在加法运算中,当某一位的和超过其位宽时,需要向上一位进位。对于大整数,这意味着需要遍历整个...

    世界500强面试题.pdf

    1.4.8. 计算 1 到 N 的十进制数中 1 的出现次数 ............................................. 97 1.4.9. 栈的 push、pop 序列[数据结构] .......................................................... 99 1.4.10....

    c语言竞赛习题

    * 输入基数 b(2)和正整数 n(十进制),输出 n 的 b 进制表示 知识点: * 数学计算:进行进制转换 7. 进制转换 2: * 输入基数 b(2)和正整数 n(b 进制),输出 n 的十进制表示 知识点: * 数学计算:进行...

    大学生《组合数学引论》习题答案.pdf

    当有理数以十进制形式表示时,其展开式为循环小数,循环节的长度至多为分母的n-1倍。这是数论和数学分析中的内容,涉及到除法原理、余数和整数的性质。 6. 组合恒等式: 文档中出现了一些组合恒等式的例子,如二项...

    黑马入学考试试题

    每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。...

    C语言经典例题100道

    例如,给定一个整数加上100后的平方根为整数,且加上168后的平方根也为整数,则这个整数是多少? **示例代码**: ```c #include #include int main() { long int i, x, y, z; for (i = 1; i ; i++) { x = ...

    贵州省贵阳市三十高二数学9月月考试题(无答案) 试题.doc

    - 第9题和第10题涉及到数制转换,要求学生将十进制数转化为五进制,并找到五进制表示的最大值。 6. **概率与统计**: - 第11题和第12题涉及到分层抽样的概念,要求确定各年级抽取样本的数量。 - 第14题中,通过...

    NOIP2017普及组c++试题

    1. 给出的代码片段通过标准输入读入一个字符串,然后初始化一个256大小的数组,将每个字符的ASCII值作为下标记录字符出现次数。但由于代码不完整,无法得出具体结果。 2. 和3.、4. 同理,由于代码片段不完整,无法...

    2022年南海区青少年信息学奥林匹克竞赛初赛试题(小学乙组)借鉴.pdf

    这个问题考察了十进制和二进制的转换。正确答案是A、(10010100)2。 4. 有一个小组的同学,按这样的顺序进入队列:chen,li,zhong,he,wang,lun,peng,wu,dan 那么第 5 位出队列的人是谁?这个问题考察了队列操作的...

    2022年浙江省二级C语言程序编写题库.doc

    1. 在正整数中找出1个最小的、被3、5、7、9除余数分别为1、3、5、7的数,将该数以格式"%d"写入到考生文献夹中Paper子文献夹下新的文献Design1.dat中。 2. 若a、b为1对亲密数,则a的因子和等于b、b的因子和等于a、且...

    CSP-J 第1套初赛模拟试题zz模拟题附答案

    题目中给出45和30的最小公倍数的计算公式为lcm(30, 45) = 30 * 45 / gcd(30, 45),其中gcd表示最大公约数。 ### 11. 二叉树节点数量 **知识点**:理解二叉树的最大节点数量与树的深度之间的关系。 - **二叉树的...

    NOIP2018普及组C++试题.pdf

    2. 进制转换:不同进制数的转换,包括十六进制(269)16,十进制(617)10,八进制(1151)8,和二进制(***)2,题目中特别要求找到与其他三个数值不相等的一个。 3. 字节与存储单位:熟悉基本的存储单位,如1MB等于1024x...

    2022年浙江省计算机二级C语言历年试卷.doc

    10. 数组排序:本题要求将输入的三个整数按由小到大的顺序输出。 11. 数组清除负数:本题要求清除数组中的负数。 12. 多项式计算:本题要求计算代数多项式的值。 13. 字符串统计:本题要求统计字符串中英文字母、...

    c语言填空笔试题100题

    根据给定的文件标题“c语言填空笔试题100题”以及描述“让你在c生涯中不再迷茫,让你在面试时,能让面试官一眼看中”,我们可以了解到这份资料旨在帮助学习者通过大量的练习题来熟悉C语言的基础概念与语法细节,并...

Global site tag (gtag.js) - Google Analytics