
枚举方法
#include<stdio.h>
int main(void){
int i[7],j;
for(i[0]=1;i[0]<=29;i[0]++){
for(i[1]=1;i[1]<=29;i[1]++){
if(i[0]==i[1]) continue;
for(i[2]=1;i[2]<=29;i[2]++){
if(i[0]==i[2]||i[1]==i[2]) continue;
for(i[3]=1;i[3]<=29;i[3]++){
if(i[0]==i[3]||i[1]==i[3]||i[2]==i[3]) continue;
for(i[4]=1;i[4]<=29;i[4]++){
if(i[0]==i[4]||i[1]==i[4]||i[2]==i[4]||i[3]==i[4]) continue;
for(i[5]=1;i[5]<=29;i[5]++){
if(i[0]==i[5]||i[1]==i[5]||
i[2]==i[5]||i[3]==i[5]||i[4]==i[5]) continue;
for(i[6]=1;i[6]<=29;i[6]++){
if(i[0]==i[6]||i[1]==i[6]||
i[2]==i[6]||i[3]==i[6]||i[4]==i[6]||i[5]==i[6]) continue;
for(j=0;j<7;j++){
printf("%3d",i[j]);
}
printf("\n");
getchar();
}
}
}
}
}
}
}
return 0;
}
试探算法
#include <stdio.h>
#define MAXN 7//设置每一注彩票的位数
#define NUM 29//设置组成彩票的位数
int num[NUM];
int lottery[MAXN];
void combine(int n,int m){
int i,j;
for(i=n;i>=m;i--){
lottery[m-1]=num[i-1];//保存一位数
if(m>1)
combine(i-1,m-1);
else{
for(j=MAXN-1;j>=0;j--)
printf("%3d",lottery[j]);
//getchar();
printf("\n");
}
}
}
int main(void){
int i,j;
for(i=0;i<NUM;i++)
num[i]=i+1;
for(i=0;i<MAXN;i++)
lottery[i]=0;
combine(NUM,MAXN);
//getchar();
return 0;
}