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盘的大小结果,排列方法为,竖徘以七小局为一小局:比如下面
大
大
大
大
大
大
大
------------------------------------------
第八局开始,
大 小
大
大
大
大
大
大
---------------------------------
第十五局开始,
大 小 小
大 小
大 小
大 小
大 小
大 小
大 小
---------------------------------
这样的排列方式。(上面的大小,是对比出来的)