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

先给出一般的解决“随机生成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 }
时间: 2024-12-25 11:51:08

试探算法_随机生成彩票号码的相关文章

随机生成身份证号码

//程序入口 public static void main ( String[] args ) { Test t = new Test(); for (int i = 0; i < 100; i++)//随机生成100个身份证号码 { System.out.println(t.getRandomID(); } } /** * 获取随机生成的身份证号码 * * @author mingzijian * @return */ public String getRandomID() { String

Java 批量随机生成身份证号码

package org.service.task.fees; import java.util.Calendar; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * * 身份证算法实现 * * 1.号码的结构 公民身份号码是特征组合码, 由十七位数字本体码和一位校验码组成. 排列顺序从左至右依次为:六位数字地址码,八位数字出生日

随机生成双色球号码和商品管理python程序

1.写一个程序,输入N就产生N条双色球号码 红球 6 01-33 蓝球 1 01-16 产生的双色球号码不能重复,写到一个文件里面,每一行是一条 红球: 01 03 05 07 08 18 蓝球:16 红球需要排序,是升序 2.写一个商品管理的程序: 1.添加商品 商品名称:商品已经存在的话,要提示 商品价格: 校验,是大于0的数字 商品数量:校验,只能是大于0的整数 2.删除商品 商品名称:商品不存在的话,要提示 3.查看商品 显示所有的商品信息 4.退出 def add_product():

随机生成双色球号码

package com.lovo.homework; public class NumberGenerator { private int[] redBalls = new int[6]; private int blueBall; public void run(){ for(int i = 0; i < 3; i++){ this.generateRedBall(); this.generateBlueBall(); this.showResult(); } } private void g

【来写个2048吧】—— 移动算法与随机数字生成

一.移动算法 其实2048的移动算法蛮简单,看代码很容易明白,就不多说了. 向左滑动 //左滑动 bool GameScene:: doLeft () { //判断有没有发生移动 bool isMove = false ; for ( int y = 0 ; y < 4; y++) { for ( int x = 0 ; x < 4; x++) { for ( int x1 = x +1 ; x1 < 4; x1++) { if ( cardArr [x1 ][ y]-> getN

随机生成32位字符串算法

随机生成32位字符串算法: function getRandom() { var arr = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D"

模拟双色球彩票开奖结果:随机生成一注双色球彩票.......

模拟双色球彩票开奖结果:随机生成一注双色球彩票,判断其是否中奖,奖金为多少.一注双色球彩票由6个不重复的红球(序号:1~32)和1个篮球(序号:1~16)构成.双色球中奖规则如下: (提示:① 随机数:java.util.Random中的Random类有一个方法int nextInt(int n)可以生成0~n的一个随机整数.(教材P202页)② java.util.Arrays的常用方法:Arrays.sort(a); //将数组a中的元素按升序排列:Arrays.binarySearch(a

随机生成红包算法

<?php /** * Created by PhpStorm. * User: kevin_yang * Date: 2018/1/4 * Time: 22:49 */ header('content-type:text/html;charset=utf-8'); ini_set('memory_limit', '256M'); require_once('CreateReward.php'); require_once('Reward.php'); $total = 100; $num =

Horspool算法(java)随机生成字符串

java代码 import java.util.Scanner; public class Horspool { public static void ShiftTable(char[] p, int[] table){ for (int i = 0; i < 26; i++) { table[i] = p.length; } for (int i = 0; i < p.length - 1; i++) { table[p[i] -'A'] = p.length - 1 - i; } } pu