题目:输入数字n,按顺序打印出从1最大的n位十进制。比如输入3,则打印1、2、3一直到最大的3位数999.
一、循环版本
#include <iostream> #include <list> #include <algorithm> #include <time.h> #include <string.h> #define MAX 1000 #define N 30 using namespace std; void print(char *a,int n); void solution(int n){ char *number = new char[n]; memset(number,'0',n); int i = n-1; while((number[0]-'0')<10){ if(number[i]-'0'>=10){ number[i]='0'; ++number[--i]; print(number,n); } else{ i=n-1; ++number[i]; if(number[i]-'0'<10) print(number,n); } } } void print(char *a,int n){ for(int i=0;i<n;++i){ cout<<a[i]; } cout<<"-"; } int main() { pre(2); return 0; }
二、循环全排列法
#include <iostream> #include <list> #include <algorithm> #include <time.h> #include <string.h> #define MAX 1000 #define N 30 using namespace std; void print(char *a,int n); void sol(char *data,int index,int elem,int n){ // cout<<index<<"-"; if(index==n-1){ data[index] = elem+'0'; print(data,n); return; } data[index] = elem+'0'; for(int i=0;i<10;++i){ sol(data,index+1,i,n); } } void print(char *a,int n){ int index = 0; while(a[index]-'0'==0)index++; for(int i=index;i<n;++i){ cout<<a[i]; } cout<<" "; } int main() { int n=3; char *a = new char[n]; memset(a,'0',n); for(int i=0;i<10;++i){ sol(a,0,i,n); } return 0; }