找回密码
 加入
搜索
楼主: 9922250

[效率算法] 问题:假设有 6副 副克牌,(一副是52张),就是一共312张。求随机排序

 火.. [复制链接]
 楼主| 发表于 2014-10-28 22:13:35 | 显示全部楼层
回复 42# netegg

    两天不来,想不到回复那么多,我还是把我的问题,重新整理,在发一次吧。
做这个程序,是想模拟赌场,赌博的情形:

开始:六副牌全部放在一起打乱,开始洗牌,因为打乱了,所以牌的顺序也是随机的.相当于六副牌的组合,他就一共有312张。
牌洗好了,现在要开始赌博了,    第一张丢弃,第二张发给庄家,第二张发给闲家,对比大小,四个花色也对比, 只能出现三种结果(大,小,和局)

继续循环,第四张丢弃,第五张发给庄家,第六张发给闲家,对比大小,

最后输出的结果为,就是这104盘的大小结果,排列方法为,竖徘以七小局为一小局:比如下面








------------------------------------------

第八局开始,
大   小






---------------------------------
第十五局开始,
大   小      小
大   小
大   小
大   小
大   小
大   小
大   小
---------------------------------
这样的排列方式。(上面的大小,是对比出来的)
 楼主| 发表于 2014-10-28 22:22:12 | 显示全部楼层
回复 44# kevinch


    一共六副牌,312张, 你开了第一局以后,那么第一局的三张牌,都要丢掉。牌盒里就剩下  309张,以此类推、
发表于 2014-10-29 08:15:53 | 显示全部楼层
本帖最后由 kevinch 于 2014-10-29 08:17 编辑

回复 47# 9922250
思路已经给出了,具体如何处理楼主自己完善吧

每次登录这个网站,安全软件都提示是赌博网站,这类的问题还是少研究一点吧
发表于 2014-10-30 14:55:04 | 显示全部楼层
#include <array.au3>
Dim $a[313], $b[2], $c[1]
;建立数组
For $i = 0 To 5
        For $j = 1 To 52
                $a[$i * 52 + $j] = $j
        Next
Next

Do
        _ArrayDelete($a,Random(1, UBound($a - 1), 1));随机删除一个元素

        For $k = 0 To 1     ;随机抽取2个元素
                $t = Random(1, UBound($a) - 1)
                $b[$k] = $a[$t]
                _ArrayDelete($a,$t)
        Next
        bj()
        
Until UBound($a) = 1

Func bj();进行比较
        Select
                Case $b[0]>$b[1]
                _ArrayAdd($c,"大")
                Case $b[0]<$b[1]
                _ArrayAdd($c,"小")
                Case $b[0]=$b[1]
                _ArrayAdd($c,"和")
EndSelect
                EndFunc   ;==>bj

;_ArrayDisplay($c)

;输出结果
_ArrayAdd($c,"")
For $i=1 To 7
        For $j=0 To 14
        ConsoleWrite($c[$i+$j*7])
        ConsoleWrite("  ")
Next
ConsoleWrite(@CRLF)
Next
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-6 00:45 , Processed in 0.065797 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表