输出1到最大n位数之间的所有数
比如
n = 2
那么从1一直输出到99
分析
直接输出,遇到大数时肯定有问题,比如n=100,存储100位的数据类型不存在。
可以利用数组来存储大数,比如n=100,可以开辟个数组 char a[101]
思路一
模拟现实中的技术方式,逢九进一
参考代码
#include <iostream>
#include <cstring>
using namespace std; bool minuxOne(char *a, int *end_index, int size)
{
if((*end_index == size - && a[size - ] == '') || *end_index < || *end_index >= size)
return false;
int tmp = size - ;
if(a[size - ] != '')
--a[size -];
else
{
a[size - ] = '';
while()
{
if(a[tmp] == '')
{
a[tmp] = '';
--tmp;
}
else
{
--a[tmp];
break;
}
}
if(a[*end_index] == '')
++*end_index;
}
return true;
} bool printNum(const int size)
{
if(size < )
return false;
char *a = new char[size];
memset(a, '', size);
int end_index = ;
while()
{
if(end_index == size - && a[size - ] == '')
break;
for(int i = ; i < size; ++i)
{
if(end_index > i && a[i] == '' )
continue;
cout << a[i];
}
cout << "\t";
if(!minuxOne(a, &end_index, size))
break;
}
delete []a;
return true;
} int main()
{
int size = ;
printNum(size);
}
结果

思路二
本质可以看作是全排列,只是前边的0别输出
#include <iostream>
using namespace std; bool print1ToMaxN(const int n);
bool print1ToMaxNRecursion(char *a, int size, int index);
bool printNum(char *a, int size);
int main()
{
int size = ;
print1ToMaxN(size);
} bool print1ToMaxN(const int size)
{
if(size <= )
return false;
char *a = new char[size];
for(int i = ; i <= ; ++i)
{
a[] = i + '';
print1ToMaxNRecursion(a, size, );
}
return true;
} bool print1ToMaxNRecursion(char *a, int size, int index)
{
if(size <= || index < )
return false;
if(index == size)
{
printNum(a, size);
return true;
}
for(int i = ; i <= ; ++i)
{
a[index] = i + '';
print1ToMaxNRecursion(a, size, index + );
}
} bool printNum(char *a, int size)
{
if(size <= )
return false;
bool IsPre0 = true;
for(int i = ; i < size; ++i)
{
if(IsPre0 && a[i] != '')
IsPre0 = false;
if(!IsPre0)
cout << a[i];
}
cout << "\t";
}
结果

分析
1. 输出问题:一开始为0不要输出,这需要输出时判断下
2. 递归全排列的本质原理:每一位字符0~0都有可能,在方位本位的时候递归遍历下一位。
输出1到最大n位数之间的所有数的更多相关文章
- C#输出文字对齐,空格位数对齐
Align String with Space This example shows how to align strings with spaces. The example formats tex ...
- 打印 1 到最大的 n 位数(C++ 和 Python 实现)
(说明:本博客中的题目.题目详细说明及参考代码均摘自 “何海涛<剑指Offer:名企面试官精讲典型编程题>2012年”) 题目 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数. ...
- エンジニア死滅シタ世界之荒れ果てたショップ [MISSION LEVEL: C] -Python3答案
题目 题目要求输入三个数字,半角空格间隔开.格式N A B 条件 ・1 ≦ N ≦ 9 ・0 ≦ A ≦ B ≦ 5000 ・(B的位数) ≦ N 输出A到B包括AB之间的所有数,如果数字的位数不够N ...
- 输出a-b之间的随机数并考虑异常
输出a-b之间的随机数并考虑异常 代码如下: package Day05;import java.util.Scanner;import java.util.Random; public class ...
- 输出图中顶点i到顶点j之间的所有简单路径
简单路径(不包括环) DFS遍历以及回溯得到结果 void dfs(ALGraph graph, int v, int end, bool visit[], int path[], int cnt) ...
- nefu117 素数个数的位数,素数定理
素数个数的位数 Time Limit 1000ms Memory Limit 65536K description 小明是一个聪明的孩子,对数论有着非常浓烈的兴趣.他发现求1到正整数10n 之间有多少 ...
- C++11 long long使用及输出
相比于C++98标准,C++11整型的最大改变就是多了 long long.分为两种:long long 和unsigned long long.在C++11中,标准要求long long 整型可以在 ...
- PHP学习之输出字符串(echo,print,printf,printr和vardump)
下面一一进行介绍. 1. echo echo 是PHP的一个关键字,它没有返回值.在写法上,它可以省略小括号.如下代码: 复制代码 代码如下: echo 'Test String'; echo('Te ...
- C# 控制台输入和输出
目录 从控制台获取输入 将输出写入控制台 Console.Write() Console.WriteLine() 格式字符串 多重标记和值 格式化字符串 索引 对齐说明符 格式字段 标准数字格式说明符 ...
随机推荐
- WKWebView 与 UIWebView
apple和google为webkit该浏览器引擎的发扬光大做出了重要贡献,在WWDC 2014发布会上发布iOS 8中,apple公布了WebKit框架,这意味着OSX和IOS开发者将共用同样的开发 ...
- hibernate---核心开发接口1(重点)
面试考这个比较少 a) Session session = sessionFactory.openSession(); 永远都是打开新的 记得要 close b) Session sessio ...
- C实现面向对象封装、继承、多态
参考资料: http://blog.chinaunix.net/uid-26750235-id-3102371.html http://www.eventhelix.com/rea ...
- 机器学习&&数据挖掘之一:决策树基础认识
决策树入门篇 前言:分类是数据挖掘中的主要分析手段,其任务就是对数据集进行学习并构造一个拥有预测功能的分类模型,用于预测未知样本的类标号,把类标号未知的样本按照某一规则映射到预先给定的类标号中. 分类 ...
- Codeforces Round #277.5 (Div. 2)
题目链接:http://codeforces.com/contest/489 A:SwapSort In this problem your goal is to sort an array cons ...
- 2014ACM/ICPC亚洲区牡丹江站 浙大命题
A Average Score http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5373 a班有n个人,b班有m个人,bob在a ...
- Java读取图片并修改像素,创建图片
public void replaceImageColor(String file, Color srcColor, Color targetColor) throws IOException{ UR ...
- 7 天玩转 ASP.NET MVC — 第 7 天
目录 第 1 天 第 2 天 第 3 天 第 4 天 第 5 天 第 6 天 第 7 天 0. 前言 今天是开心的一天.因为我们终于来到了系列学习的最后一节.我相信你喜欢之前的课程,并从中学到了许多. ...
- HDU 3998 Sequence (最长上升子序列+最大流)
参考链接:http://www.cnblogs.com/gentleh/archive/2013/03/30/2989958.html 题意:求一个序列的最长上升子序列,及其个数(注意:两个最长上升子 ...
- Eclipse 字体选择
Windows下推荐使用Consolas Linux下推荐使用DejaVu Sans Mono, Website: http://dejavu-fonts.org/wiki/Main_PageDown ...