试探算法_随机生成彩票号码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了试探算法_随机生成彩票号码相关的知识,希望对你有一定的参考价值。
先给出一般的解决“随机生成7位1—29号数的彩票号码”问题的代码:
1 #include<stdio.h> 2 int main() 3 { 4 int j,i[7];//定义数组保存随机生成不同的7位数字 5 for(i[0]=1;i[0]<=29;i[0]++)//在1——29中随机生成不同的数字 6 for(i[1]=1;i[1]<=29;i[1]++) 7 { 8 if(i[1]==i[0]) continue; 9 for(i[2]=1;i[2]<=29;i[2]++) 10 { 11 if(i[2]==i[1]||i[2]==i[0]) continue; 12 for(i[3]=1;i[3]<=29;i[3]++) 13 { 14 if(i[3]==i[2]||i[3]==i[1]||i[3]==i[0]) continue; 15 for(i[4]=1;i[4]<=29;i[4]++) 16 { 17 if(i[4]==i[3]||i[4]==i[2]||i[4]==i[1]||i[4]==i[0]) continue; 18 for(i[5]=1;i[5]<=29;i[5]++) 19 { 20 if(i[5]==i[4]||i[5]==i[3]||i[5]==i[2]||i[5]==i[1]||i[5]==i[0]) continue; 21 for(i[6]=1;i[6]<=29;i[6]++) 22 { 23 if(i[6]==i[5]||i[6]==i[4]||i[6]==i[3]||i[6]==i[2]||i[6]==i[1]||i[6]==i[0]) continue; 24 for(j=0;j<=6;j++) 25 printf("%3d",i[j]); 26 printf("\n"); 27 getch();//等待你按下任意键再执行后面的语句 28 } 29 30 31 } 32 } 33 } 34 } 35 36 } 37 return 0; 38 }
该程序主要存在以下两个缺点:
1.程序繁琐,用的循环太多,耗时
2.不具备通用性
下面再给出用试探法解决“随机生成彩票号码”问题的代码:
1 #include<stdio.h> 2 #define MAX 7//设置每一注彩票的位数 3 #define NUM 29//设置生成彩票的数字 4 int a[NUM]; 5 int b[MAX]; 6 void combine(int n,int m)//n表示生成彩票的数字,m表示每一注彩票的位数 7 { 8 int i,j; 9 for(i=n;i>=m;i--) 10 { 11 b[m-1]=a[i-1];//数组下标从0开始计数 12 if(m>1) 13 combine(i-1,m-1); 14 else //若m=1,则输出一注号码 15 { 16 for(j=MAX-1;j>=0;j--) 17 printf("%3d",b[j]); 18 getch(); 19 printf("\n"); 20 21 22 } 23 } 24 } 25 int main() 26 { 27 int i; 28 for(i=0;i<NUM;i++)//设置各位彩票数字 29 a[i]=i+1; 30 for(i=0;i<MAX;i++) 31 b[i]=0; 32 combine(NUM,MAX); 33 getch(); 34 return 0; 35 }
以上是关于试探算法_随机生成彩票号码的主要内容,如果未能解决你的问题,请参考以下文章