输出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() 格式字符串 多重标记和值 格式化字符串 索引 对齐说明符 格式字段 标准数字格式说明符 ...
随机推荐
- 站立会议 ~NO.1
Yesterday:None Today: Search for offline maps of our school and testify the veracities of it Problem ...
- java数组元素的输出
java数组元素的输出 利用Arrays.toString(数组名即可) String[] name = {"Tom", "John", "Nike& ...
- iOS基础问答面试
<简书社区 — Timhbw>iOS基础问答面试题连载(一)-附答案:http://www.jianshu.com/p/1ebf7333808d <简书社区 — Timhbw> ...
- Netsharp快速入门(之5) 基础档案(之D 实体建模 生成实体代码、同步数据库、配置插件运行时)
作者:秋时 杨昶 时间:2014-02-15 转载须说明出处 3.3.1 同步数据库并生成dll文件 1.在基础档案和销售管理项目上右击,选择同步数据库结构来创建数据库表 2. 在基础档案项目 ...
- 《JavaScript高级程序设计》第4章 变量、作用域和内存问题
4.1 基本类型和引用类型 5种基本类型:Undefined.Null.Boolean.Number和String,这5种基本类型是按值访问的,因为可以操作保存在变量中的实际的值. 引用类型:可能由多 ...
- ansii、unicode、utf8 区别和关系
本地化过程中涉及到源文件和目标文件的传输问题,这时候编码就显得很重要.中文的网页和操作系统中通常采用ANSI编码,这也是微软OS的一个字符标准.对于ANSI,不同的国家和地区制定了不同的标准,由此产生 ...
- 百度Hi之CSRF蠕虫攻击
漏洞起因:百度是国内最大的中文搜索引擎.同时百度也提供了百度空间.百度贴吧等BLOG社区服务,拥有海量的用户群,号称全球最大中文社区. 80sec发现过百度产品一系列的安全漏洞,其中一些问题得到了有效 ...
- Environment.SpecialFolder.CommonApplicationData
private void button1_Click(object sender, EventArgs e) { var path=Environment.GetFolderPath(Environm ...
- JavaScript 堆内存分析新工具 OneHeap
OneHeap 关注于运行中的 JavaScript 内存信息的展示,用可视化的方式还原了 HeapGraph,有助于理解 v8 内存管理. 背景 JavaScript 运行过程中的大部分数据都保存在 ...
- Javascript里的那些距离们
1.有滚动条的控件的距离: scrollTop和scrollLeft:分别指有滚动条的容器控件的滚动条的top和left:页面滚动条的通用取法:document.body.scrollTop(FF\C ...