剑指offer11:打印1到最大的n位数

题目:输入数字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;
}

 

posted on 2016-07-28 10:08  吹吹风之学习路程  阅读(163)  评论(0)    收藏  举报