输出1到最大的N位数 【微软面试100题 第六十五题】
题目要求:
输入数字n,按顺序输出从1到最大的n位10进制数。
例如,输入3,则输出1、2、3...、999(最大的3位数)。
参考资料:剑指offer第12题。
题目分析:
如果我们在数字前面补0的话,就会发现n位所有十进制数其实就是n个从0到9的全排列。也就是说,我们把数字的每一位都从0到9排列一遍,就得到了所有的十进制数。只是我们打印的时候,数字排在前面的0我们不打印出来而已。
代码实现:
#include <iostream> using namespace std; const int N = ;
void PrintToMaxOfNDigits(int n); int main(void)
{
cout << "打印1到最大的 " << N <<" 位数:" << endl;
PrintToMaxOfNDigits(N);
cout << endl;
return ;
}
void Print(char *num)
{
bool isBeginning = true;
int len = strlen(num);
for(int i = ;i<len;i++)
{
if(isBeginning && num[i] != '')
isBeginning = false;
if(!isBeginning)
cout << num[i];
}
cout << " ";
}
void PrintCore(char *num,int len,int index)
{
if(index == len-)
{
Print(num);
return;
}
for(int i=;i<;i++)
{
num[index+] = i+'';
PrintCore(num,len,index+);
}
}
void PrintToMaxOfNDigits(int n)
{
if(n <= )
return;
char *num = new char[n+];
num[n] = '\0';
for(int i=;i<;i++)
{
num[] = i+'';
PrintCore(num,n,);
}
}
输出1到最大的N位数 【微软面试100题 第六十五题】的更多相关文章
- 和为n连续正数序列 【微软面试100题 第五十一题】
题目要求: 输入一个正数n,输出所有和为n连续正数序列(至少两个). 例如输入15,由于1+2+3+4+5 = 4+5+6 = 7+8 = 15.所以输出3个连续序列1~5,4~6,7~8. 参考资料 ...
- 和为s的两个数字 【微软面试100题 第十四题】
题目要求: 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,输出任意一对即可. 例如输入数组{1,2,4,7,11,15}和数字15.由于4+1 ...
- 链表中倒数第k个结点 【微软面试100题 第十三题】
题目要求: 输入一个链表,输出该链表中倒数第k个结点.链表的倒数第0个结点为链表的尾指针. 参考资料:剑指offer第15题 题目分析: 1.两个指针,第一个先走k步,然后两个指针同时走,直到第一个走 ...
- 查找最小的k个元素 【微软面试100题 第五题】
题目要求: 输入n个整数,输出其中最小的k个. 例如:输入1,2,3,4,5,6,7,8这8个数字,则最小的4个数字为1,2,3,4. 参考资料:剑指offer第30题. 题目分析: 解法一: 用快排 ...
- C语言库函数实现 【微软面试100题 第八十三题】
题目要求 1.strcpy/memcpy/memmove: 2.memset函数: 3.字符串处理函数. 题目分析 1.接口定义: char * strcpy(char * dest, const c ...
- Singleton模式类 【微软面试100题 第七十二题】
题目要求: 实现C++单例模式,即只能生成一个实例的类. 题目分析: 1.一般情况:用构造函数私有化和静态函数实现. 2.如果考虑内存泄露:用智能指针+一般情况方法. 3.如果考虑线程安全:加锁. 代 ...
- 在O(1)时间内删除链表结点 【微软面试100题 第六十题】
题目要求: 给定链表的头指针和一个结点指针,在O(1)时间删除该结点. 参考资料:剑指offer第13题. 题目分析: 有几种情况: 1.删除的结点是头结点,且链表不止一个结点: 2.删除的结点是头结 ...
- C++异常安全的赋值运算符重载 【微软面试100题 第五十五题】
题目要求: 类CMyString的声明如下: class CMyString { public: CMyString(char *pData=NULL); CMyString(const CMyStr ...
- 在从1到n的正数中1出现的次数 【微软面试100题 第三十题】
题目要求: 给定 一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有“1”的个数. 例如:N = 2,写下1,2.这样只出现了1个“1”. N = 12 ...
随机推荐
- String对象中常用的方法有哪些?
1.length()字符串长度 String str="abc"; System.out.println(str.length()); //输出3 2.charAt()截取一个字符 ...
- PIC IDE编译器变量问题
1.用const关键字是不能把变量定义到ROM区域的,在IDE编译器里要在变量的定义前面加入rom关键字.例如: rom char tmp[257]={0};const rom char tmp[25 ...
- Java中对jsonArray的排序,使用的是Gson
使用Gson对json解析字符串,转化为json对象. 先上代码: 下面是main方法里面的代码 package testJava; import java.util.ArrayList; impor ...
- nmap -sT -A --script=smb-check-vulns -PO 172.16.21.170
nmap -sT -A --script=smb-check-vulns -PO 172.16.21.170 调用了nmap的插件--script=smb-check-vulns -sT 隐蔽的tcp ...
- WebUploader实现采集图片的功能
项目最开始用百度团队的文件上传组件做了个物料照片采集的功能,后来做员工头像采集时竟然不知道怎么使用了. 参照官方Demo: http://fex.baidu.com/webuploader/getti ...
- dac verilog ad5601
首先从官网下载数据手册.DAC有串行有并行,ad5601是串行,(需要好多时钟沿的移位内部转换为并行在输出). 按照手册的时序编写程序, 关注下芯片的波特率范围 看看手册的数据传输那些事有效的数据位 ...
- GridView的 PreRender事件与 RowCreated、RowDataBound事件大乱斗
GridView的 PreRender事件与 RowCreated.RowDataBound事件大乱斗 之前写了几个范例,做了GridView的 PreRender事件与 RowCreated.Row ...
- 机器学习-octave使用
1 == 2 % false 1 ~=2 % true % 隐藏版本,只显示>> . PS1('>> '); % 输出两位小数格式 disp(sprintf('2 ...
- 如何解析比特币中的交易原始数据rawData
交易数据结构 有关交易的详细信息可以查看比特币的wiki网站:Transaction TxBinaryMap: 原始图片地址 交易的结构表格(Transaction): 示例数据 以一个正式网络的一笔 ...
- iOS 3DTouch 的开发套路大全
今天休息,先来无事就自己看了一下,关于3d touch,看完后自己有动手尝试了一下,感觉也并不是很难, 经过大量的搜索,目前为止,发现有三种实现方式: 第一种:info文件中添加字段 这种方式,最为直 ...