试探算法_随机生成彩票号码

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 }

 

以上是关于试探算法_随机生成彩票号码的主要内容,如果未能解决你的问题,请参考以下文章

java的彩票

基于Java SE的模拟双色球彩票系统

小白量化彩票实战彩票号码快速生成组合及利用数据库生成彩票号码组合

JAVA课程设计 彩票号码产生器

JAVA课程设计 彩票号码产生器

彩票插入排序算法