自己写个“大乐透”彩票程序,求大神再写个更有效率的

xinhaota · 2018-07-08 19:56:57 · 1909 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2018-07-08 19:56:57 的主题,其中的信息可能已经有所发展或是发生改变。


  • 精简问题:
    1. go有哪个随机函数的原理 跟“从一个大罐子里随机先后拿7个球”是比较接近的?
  • 2.求个更效率的算法

前几天支付宝蚂蚁积分换彩票,竟然中了5元钱,一下子又勾起我中学买彩票的回忆和欲望,但本人有选择恐惧症,正好是个“非程序员”,自己写个程序,但处理不重复那段写的太业余了,谁有更好的办法? 还有 go,有哪个随机函数的原理 跟“从一个大罐子里随机先后拿7个球”是比较接近的?感觉 rand.Seed(time.Now().UnixNano()) 这个函数跟系统时间挂钩,不够随机啊!


大乐透投注区分为前区号码和后区号码,前区号码范围为01~35,后区号码范围为01~12。大乐透每期从35个前区号码中开出5个号码,从12个后区号码中开出2个号码作为中奖号码,大乐透玩法即是竟猜开奖号码的5个前区号码和2个后区号码,顺序不限。


package main

import (
    "math/rand"
    "time"
    "fmt"
)
//大乐透是7个数,前面是35选5,后面是12选2
func main()  {
    rand.Seed(time.Now().UnixNano())
    var cp [7]int

    i:=0
    //前面的35选5
    for  {
        a:=rand.Intn(36)
        if a!=0 && a!=cp[0] &&a!=cp[1] && a!=cp[2] && a!=cp[3] && a!=cp[4] {
            cp[i]=a
            i++
            if i==5{
                break
            }
        }
    }
    //后面的12选2
    for  {
        a:=rand.Intn(13)
        if a!=0 && a!=cp[5] {
            cp[i]=a
            i++
            if i==7{
                break
            }
        }
    }
    //排序大小 前5个数
    for i := 0; i < 5; i++ {
        maxIndex := 0
        for j := 1; j < 5-i; j++ {
            if cp[j] > cp[maxIndex] {
                maxIndex = j
            }
        }
        cp[5-i-1], cp[maxIndex] = cp[maxIndex], cp[5-i-1]
    }
    //排序大小 后2个数
    if cp[5]>cp[6]{
        cp[5],cp[6]=cp[6],cp[5]
    }
    fmt.Println(cp)
}

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1909 次点击  
加入收藏 微博
10 回复  |  直到 2018-07-11 22:22:37
nickluo
nickluo · #1 · 7年之前

兄弟,你用的是伪随机,如果是正式产品,会亏大发的

xinhaota
xinhaota · #2 · 7年之前
nickluonickluo #1 回复

兄弟,你用的是伪随机,如果是正式产品,会亏大发的

请问 真随机数是?,这没正式产品

nickluo
nickluo · #3 · 7年之前

用这个包 cryRand "crypto/rand"

maxBigInt := big.NewInt(maxNum) tmp, _ := cryRand.Int(cryRand.Reader, maxBigInt)

写一个递归就行了,你那样写太复杂了

CYL96
CYL96 · #4 · 7年之前

真正随机很简单,在创建随机数的时候,读取硬盘使用量,内存使用量,cPU当前使用量,当前网速,之类的。

CYL96
CYL96 · #5 · 7年之前
CYL96CYL96 #4 回复

真正随机很简单,在创建随机数的时候,读取硬盘使用量,内存使用量,cPU当前使用量,当前网速,之类的。

当然也不一定,可能也是一个伪随机,欢迎大佬指正

xinhaota
xinhaota · #6 · 7年之前

谢谢各位大佬(#^.^#)

keepeye
keepeye · #7 · 7年之前

cat /dev/random

momaek
momaek · #8 · 7年之前

https://www.random.org/ 随机了解一下

cg33
cg33 · #9 · 7年之前
xinhaota
xinhaota · #10 · 7年之前
cg33cg33 #9 回复

https://github.com/NebulousLabs/fastrand 了解下

谢谢

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传