32. 从 1 到 n 整数中 k (0，1， 2， 3， 4， 5， 6， 7， 8， 9)出现的次数。  时间 O(log10N)

A. 当 K ！= 0 时：

n = 2014，K = 1 为例来找规律。从 1 至 2014 中，数字 1 总计出现了 次出现在十位， 次出现在百位，1000 次出现在千位。

B. 当 K = 0 时：

```#include <iostream>
using namespace std;
int numberOfK(int n, int k) // 10 > k >= 0
{
int count = 0;
int cur_pos = 1;
int high, low;
do
{
high = n / (cur_pos * 10);
low = n % cur_pos;
int cur_digit = n % (cur_pos * 10) / cur_pos;
if(cur_digit < k)
count += high * cur_pos;
else{
if(k == 0) --high;
if(cur_digit == k)
count += high * cur_pos + low + 1; // when high == 0, cur_digit must be the last number that is not 0.
else
count += high * cur_pos + cur_pos;
if(k == 0) ++high;
}
cur_pos *= 10;
}while(high > 0);
return count;
}
int main()
{
cout << numberOfK(101, 1) << endl;
cout << numberOfK(101, 0) << endl;
return 0;
}
```

33. 把正整数数组排成最小的数

```#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
#pragma warning(disable : 4996)
int cmp(const void *str1, const void *str2);
char combine1[21];   // length of int number is no more than 10
char combine2[21];

void getMinNumber(int data[], int length)
{
if(data == NULL || length < 0) return;
char **strData = new char*[length];
for(int i = 0; i < length; ++i)
{
strData[i] = new char[11];
sprintf(strData[i], "%d", data[i]);
}
qsort(strData, length, sizeof(char*), cmp);

for(int i = 0; i < length; ++i)
printf("%s", strData[i]);
printf("\n");

for(int i = 0; i < length; ++i)
delete[] strData[i];
delete[] strData;
}

int cmp(const void *str1, const void *str2)
{
strcpy(combine1, *(const char**)str1);
strcpy(combine2, *(const char**)str2);
strcat(combine1, *(const char**)str2);
strcat(combine2, *(const char**)str1);
return strcmp(combine1, combine2);
}

int main()
{
int data[] = {3, 2, 1, 6, 5, 4, 9, 8, 7, 10};
getMinNumber(data, 10);

return 0;
}
```

34. 丑数

```#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
const int N = 1000000;
int uglyNumber[N] = {1};
int min(int a, int b, int c)
{
a = a > b ? b : a;
a = a > c ? c : a;
return a;
}
void getUglyNumber(int N)
{
int t2, t3, t5, cnt = 1;
t2 = t3 = t5 = 1;
while(cnt < N)
{
uglyNumber[cnt] = min(t2*2, t3*3, t5*5);
while(t2*2 <= uglyNumber[cnt]) ++t2;
while(t3*3 <= uglyNumber[cnt]) ++t3;
while(t5*5 <= uglyNumber[cnt]) ++t5;
++cnt;
}
}
int main()
{
int k;
getUglyNumber(N);
while(true)
{
cin >> k;
if(k < N)
cout << uglyNumber[k] << endl;
}
return 0;
}
```

## Chap5：32– 34的更多相关文章

1. 【故障•监听】TNS-12518、TNS-00517和 Linux Error：32：Broken pipe

[故障|监听]TNS-12518.TNS-00517和 Linux Error:32:Broken pipe 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱 ...

2. ASM:《X86汇编语言-从实模式到保护模式》第10章：32位x86处理器的编程架构

★PART1:32位的x86处理器执行方式和架构 1. 寄存器的拓展(IA-32) 从80386开始,处理器内的寄存器从16位拓展到32位,命名其实就是在前面加上e(Extend)就好了,8个通用寄存 ...

3. Linux：32/64位程序（应用程序、共享库、内核模块）

摘要: Linux系统区分32/64位,相应地,应用程序.共享库和内核模块也区分32/64位. 本文以Ubuntu系统为例,介绍如何编译和使用32/64位的应用程序.共享库和内核模块. 1. 应用程序 ...

4. 在论坛中出现的比较难的sql问题：32(row_number函数+子查询 sql循环取差值)

原文:在论坛中出现的比较难的sql问题:32(row_number函数+子查询 sql循环取差值) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. sql循环取差值,该怎 ...

5. TNS-12518 &amp; Linux Error：32：Broken pipe

最近一周,有一台ORACLE数据库服务器的监听服务在凌晨2点过几分的时间点突然崩溃,以前从没有出现过此类情况,但是最近一周出现了两次这种情况,检查时发现了如下一些信息: \$ lsnrctl servi ...

6. 初级模拟电路：3-2 BJT的工作原理

回到目录 和前面介绍二极管的PN结的工作原理一样,BJT的量子级工作机制也非常复杂,一般教科书上为了帮助学习者能快速理解,也都是用一种简化模型的方法来介绍BJT的工作机理,一般只需大致了解即可.只要记 ...

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

一.题目:数字在排序数组中出现的次数 题目:统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4. 二.解题思路 2 ...

8. Effective C++：规定34：区分接口继承和实现继承

(一个) class Shape { public: virtual void draw() const = 0; virtual void error(const string& msg); ...

9. Effective C++ 笔记：条款 34 实现继承和接口继承

Differentiate between inheritance of interface and inheritance of implementation. 行为含义 声明一个pure virt ...

## 随机推荐

1. centos下MYSQL 没有ROOT用户的解决方法。

SbTest for using sysbench creating scritps: sysbench --test=oltp --oltp-table-size=100000 --mysql-db ...

2. C++设计模式-Prototype原型模式

作用: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. Prototype模式提供了一个通过已存在对象进行新对象创建的接口(Clone), Clone()实现和具体的语言相关,在C+ ...

3. iOS 开发-- enum与typeof enum用法

一, 两者的用法 枚举类型定义用关键字enum标识,形式为: enum标识符 { 枚举数据表 }; enum用来定义一系列宏定义常量区别用,相当于一系列的#define ** **,当然它后面的标识符 ...

4. Mac OS X上尝试编译CoreCLR源代码

CoreCLR登陆GitHub之后,体验CoreCLR首当其冲的方式就是在自己的电脑上编译它,昨天分别在Windows与Linux上成功编译了CoreCLR,详见: 1)Windows上成功编译Cor ...

5. hdu 4000 Fruit Ninja 树状数组

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4000 Recently, dobby is addicted in the Fruit Ninja. ...

7. li样式不显示使用overflow:hidden导致Li前面点、圈等样式不见

点评:用了overflow:hidden 会影响 list-style,即当ul 中的li 的overflow 为hidden的时候,list-style不起作用,不显示前面的点.圈等样式,在ul或l ...

8. windows2003网络负载平衡设置

问题 随着计算机技术的不断发展,单台计算机的性能和可靠性越来越高.但现实中还是有许多应用是单台计算机难以达到,例如: 1.银行存储用户数据的数据库服务器必须保证24小时不间断的运转,并在发生严重硬件故 ...

9. Android如何监听蓝牙耳机的按键事件

写在前面: 直接想要代码很简单,你直接把滚动条拉到最底端就可以看到.如果想要十分地了解为什么,那就按照我规划的一步一步来理解.以下测试环境以手头上有的「Bluedio + 红米手机」. 1.蓝牙耳机的 ...