//全组合其实是个树的深度遍历 输出1到N位数最大值的全部数字 这个要考虑大数的问题:可以用数组和字符串 还有比较简单的方法那就是利用全组合树的遍历来做
//下面就是树的遍历
#include<stdio.h>
#include<string.h>
#define maxn 11
void printf_s(int num[],int len);
void solve(int l,int num[]);
int n;
int mat[maxn]={0,1,2,3,4,5,6,7,8,9};//存储数组
int main(){
while(scanf("%d", &n)!=EOF){
int num[n];//输出数组
solve(0,num);
}
return 0;
}
void solve(int l,int num[]){
if(l>=n){
printf_s(num,n);
printf("\n");
return;
}
int i;
for( i=0;i<10;++i){
num[l]=mat[i];
solve(l+1,num);
}
}
void printf_s(int num[],int len){
int i;
int flag=0;
for(i=0;i<len;i++){
if(flag)
printf("%d",num[i]);
else if(num[i]!=0){
flag=1;
printf("%d",num[i]);
}
}
}
如果觉得int存1--9个数字太浪费了,那也可以,规定多少个bit来进行存放
#include<stdio.h>
#include<string.h>
#define maxn 11
typedef struct {
unsigned int one:8;
unsigned int second:8;
unsigned int three:8;
unsigned int four:8;
}bit4_int;//sizeof ==4
int main(){
int num_one,num_second;
bit4_int num[1];
scanf("%d,%d",&num_one,&num_second);
num[0].one=num_one;
num[0].second=num_second;
printf("%d,%d", num[0].one,num[0].second);
return 0;
}