200悬赏加50追分求C/C++编程“单人纸牌”

来源:百度知道 编辑:UC知道 时间:2024/06/12 00:40:37
- 问题描述
Double Patience是一种单人纸牌游戏,共36张牌分成9叠,每叠4张牌面向上。
每次,游戏者可以从某两个不同的牌堆最顶上取出两张牌面相同的牌(如黑桃10和梅花10)并且一起拿走。如果最后所有纸牌都被取走,则游戏者就赢了,否则游戏者就输了。
George很热衷于玩这个游戏,但是一旦有时有多种选择的方法,George就不知道取哪一种好了,George会从中随机地选择一种走,例如:顶上的9张牌为KS, KH, KD, 9H, 8S, 8D, 7C, 7D,6H,显然有5种取法:(KS, KH), (KS, KD), (KH, KD), (8S, 8D), (7C, 7D),当然George取到每一种取法的概率都是1/5。
有一次,George的朋友Andrew告诉他,这样做是很愚蠢的,不过George不相信,他认为如此玩最后成功的概率是非常大的。请写一个程序帮助George证明他的结论:计算按照他的策略,最后胜利的概率。

- 输入数据
9行每行4组用空格分开的字串,每个字串两个字符,分别表示牌面和花色,按照从堆底到堆顶的顺序给出。

- 输出数据
一行,最后胜利的概率,精确到小数点后6位。

- 样例输入
AS 9S 6C KS
JC QH AC KH
7S QD JD KD
QS TS JS 9H
6D TD AD 8S
QC TH KC 8D
8C 9D TC 7C
9C 7H JH 7D
8H 6S AH 6H

- 样例输出
0.589314

递归程序执行效率就是低哦,运行了5分钟才出结果

首先说明一下,为了简化问题,把花色条件去掉了(没用),扑克牌A-T用整型1-14代替,不用输入,直接在主函数中初始化(要自己输入的话很好做的)

程序如下(C语言):

有疑问百度HI,QQ406344627都可以。

main()

{float george(int data[][],int top[]);

int top[9],i,data[9][4]={

              { 1, 9, 6,13},

              {11,12, 1,13},

              { 7,12,11,13},

              {12,14,11, 9},

              { 6,14, 1, 8},

              {12,14,13, 8},

        &