netegg 发表于 2014-10-26 10:24:31

不对,lz到底要排序还是要组合

netegg 发表于 2014-10-26 11:09:11

还是那个问题, 假设洗牌后第一张牌是黑桃A(第一副牌的),第二张是红桃A(第二副牌的)和洗牌后第一张是黑桃A(第三副牌的),第二张是红桃A(第四副牌的),其余的牌都一样,是算两种还是算一种

netegg 发表于 2014-10-26 23:58:51

对了,知道四色问题吗,这个比那个简单多了

lanfengc 发表于 2014-10-27 10:01:04

回复 11# netegg


    其实你想的有点复杂了.不管第一副还是第二幅的黑桃A, 它是两张不同的牌, 按楼主的意思,应该是把这两张牌的不同顺序排列作为两种不同的情况来做的.所以,这个问题只是用 排列公式对312取全排列. 也就是总共有312的阶乘个结果.

netegg 发表于 2014-10-27 10:30:15

本帖最后由 netegg 于 2014-10-27 10:34 编辑

回复 34# lanfengc
所以我才问lz,那种相同点数花色的牌的排序不管出自哪一副牌到底是算相同,还是算不相同

netegg 发表于 2014-10-27 10:46:15

我不是不知道怎么算,一个公式的事,但就是lz没说清楚到底是什么

netegg 发表于 2014-10-27 11:08:56

回复 34# lanfengc
其实说白了就是lz要的是组合还是排列的问题

netegg 发表于 2014-10-27 11:14:43

楼主所谓的312张牌,那就是说无所谓了,反正是不同的,但是楼主又说有多少种,实在不清楚到底指望要什么

netegg 发表于 2014-10-27 11:16:32

楼主所谓的312张牌,那就是说无所谓了,反正是不同的,但是楼主又说有多少种,实在不清楚到底指望要什么

netegg 发表于 2014-10-27 11:28:50

回复 34# lanfengc

我想的是实际情况并非如此,即六副牌的黑桃a是一样的,其他也都类似,所以才问
不过好像有点想法了,随机取13次,然后再随机取6次,可能可以

lanfengc 发表于 2014-10-28 17:17:11

回复 40# netegg


下面是我的一点拙见, 不知道我这样理解对不对.

假设第一副牌的黑桃A, 用 [黑桃A]   表示 , 第二幅用[黑桃A]表示
....以此类推,第六副的 方块K应该按照 黑红梅方 的顺序为 [方块K]

也就是用一个二维数组   定义为扑克牌,然后对数组的每个元素按照上面的格式赋值
再定义一个一维数组, 存放结果.定义为结果=

无限循环, 每次循环分别取0-5的随机数 (用x表示) 和 0-51的随机数(用y表示)各一个.
从二维数组中取出这个随机的结果, 保存到临时变量.
然后用随机数(x+1)*(y+1) 作为结果数组的下标.
例如: x=3, y=39 , 那么(x+1)*(y+1) = 160
再判断 结果 中存放的内容是否为0, 如果为0, 则把扑克牌的元素赋值到 结果 中.

随机结束, 赋值结束后, 再判断一维数组中的所有下标从1开始的元素是否有一个为0, 如果都不为0, 则证明一组数据随机成功, 退出循环. 显示结果.

netegg 发表于 2014-10-28 19:25:18

回复 41# lanfengc
就是不知道楼主到底要什么结果,如果只是牌的话,应该没这么复杂

netegg 发表于 2014-10-28 19:28:41

回复 41# lanfengc

而且我发现lz在思路上好像有点混乱

kevinch 发表于 2014-10-28 20:28:51

Global $card=["2","3","4","5","6","7","8","9","10","J","Q","K","A"],$color=["黑","红","花","片"]
Dim $howmany=6
Global $all
$t=0
For $a=1 To $howmany
        For $b=0 To UBound($color)-1
                For $c=0 To UBound($card)-1
                        $all[$t]=$color[$b]&$card[$c]
                        $t+=1
                Next
        Next
Next
_Display()
$t=Random(1000,9999)
For $a=1 To $t
        $b=Random(0,UBound($all)-1)
        $c=Random(0,UBound($all)-1)
        If $b<>$c Then
                $str=$all[$b]
                $all[$b]=$all[$c]
                $all[$c]=$str
        EndIf
Next
_Display()

Func _Display()
        $str=""
        For $a=0 To UBound($all)-1
                $str&=$all[$a]&" "
                If Mod($a,UBound($card))=UBound($card)-1 Then $str&=@CRLF
        Next
        ConsoleWrite($str&@CRLF)
EndFunc小区域随机变换,不知道结果是不是楼主想要的

9922250 发表于 2014-10-28 22:13:08

回复 44# kevinch


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

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

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

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








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

第八局开始,
大   小






---------------------------------
第十五局开始,
大   小      小
大   小
大   小
大   小
大   小
大   小
大   小
---------------------------------
这样的排列方式。(上面的大小,是对比出来的)
页: 1 2 [3] 4
查看完整版本: 问题:假设有 6副 副克牌,(一副是52张),就是一共312张。求随机排序