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

 

先给出一般的解决“随机生成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 }

 

posted @ 2016-03-23 21:13  新生小诺  阅读(1872)  评论(0编辑  收藏  举报