试探算法

枚举方法

#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;
}


阅读更多

没有更多推荐了,返回首页