扑克统计算法
Ⅰ 十三张扑克算法
积分规则算法如下:
1、牌面大小顺序:A>K>Q>J>10>9>8>7>6>5>4>3>2。
2、牌型大小顺序:一条龙>同花顺>四条>葫芦>同花>顺子>三条>两对>对子>散牌(乌龙)。
3、赢一墩:同一墩,大于其他某个玩家,自己加1注(头墩加1注,中墩加2注,底墩加3注)。
4、输一墩:同一墩,小于其他某个玩家,自己减1注(头墩减1注,中墩减2注,底墩减3注)。
5、强碰(打和):同一墩,与其他玩家大小一样,自己加0注。
游戏规则:
四人中一人为庄家,(也可以四人对比,) 庄家把除去大小王的一副牌牌分成四份,每份十三张。开牌前,各闲家向庄家下注。
各人把十三张牌排成三段(道),称头(道)、二道及尾(道)。头有三张,二道及尾各五张。头道必须小于二道,二道必须小于尾道,否则称为“相公”。凡“相公”者全赔。
头段因为只有三张牌,因此不算顺、花。只可能是不成花式(称无头),一对或三条。各人排好牌后,打开牌跟庄家比较大小。头跟头比,二道跟二道比,尾跟尾比。
比较时,先比牌型。牌型相同时,比点数。部分玩法的规则,比点数时由最大点数的牌比起,相同时比第二大的牌,如此类推。倘若完全相同,比最大点数牌的花色。
部分玩法的规则订成对庄家稍为有利:只比点数最大的一只牌。倘若相同,一律由庄家胜。任何一方遇上以下的组合通吃,称为“报到”。
Ⅱ 打迷糊扑克牌怎么算账
扑克牌的总点数怎么算的,我的算法是扑克牌的点数有A,K,Q,J,10,9,8,7,6,5,4,3,2,1点,J,Q,K分别代表11点,12点,13点,另外还有大小王,大小王都代表0点,我的算法就是把以上数字分别相加,其结果是91点,扑克牌又分为红桃,黑桃,方块,梅花,就用91X4=364,大小王为零点,就不相加了。这就是我的算法、根据不同的玩法,可能出现别的算法,就不一一叙述了。
Ⅲ 请教关于扑克的算法
我代码已经写的有些眉目了,随机发牌已经写完,摆放算法在纸上画出来了应该没什么大问题,代码明天写,明天下班继续回来看看,应该能搞定。
到时候思考过程我都会写出来,代码部分会放到我的空间,敬请留意。
回答者:风骚的可乐 - 千总 四级 12-13 01:40
----------------------------
问题描述:
打印3行,每行9张扑克,用户随机记录一张之后输入该扑克所在的行号(1-3)
程序打乱顺序两次,用户再输入所记录的扑克在新的矩阵中的行号,也是两次。
程序给出准确结果。
--------------------------------------------------------------
分析:
假设:54张扑克对应54个整数,随机抽取27个排成矩阵。
假设:第i次打乱之后的矩阵为M(i),用户第i次输入的行号为L(i)。这里i取1,2或3。
进行第一次打乱,我们将得到用户输入的两个碰培数,L(1)和L(2)。此时,我们需要保证同时在M(1)中第L(1)行,且在M(2)中第L(2)行的元素足够
少,假如这时候满足条件的数组是A(1),其中含元素N(1)个。
那么我们再进行第2次打乱,用户输入L(3)。那么这时候,我们要保证,同时在M(3)中第L(3)行,且在数组A(1)中的元素,有且仅有1个,也就
是N(2)必须为1。
--------------------------------------------------------------
来看一个例子:
假设有如下的整数矩阵
[1] [2] [3]
[4] [5] [6]
[7] [8] [9]
假定我记录了8,那么L(1)=3,那么程序应该知道,用户记录的数字要么是7,要么8,要么9。这时候需要把这3个数放到不同的3行里,这样下
次用户输入行数就搏枣能确定两次的交集了。
看看这种笑银唯移位:
[1] [5] [9]
[4] [8] [3]
[7] [2] [6]
如果拥护输入L(2)=2,程序将可以直接判定,第一次在{ 7,8,9 }中,且第2次在{ 4,8,3 }中的,必然是8这个数。
同理,我们也可以这样移位:
[1] [8] [6]
[4] [2] [9]
[7] [5] [3]
这样,用户的输入就应该是L(2)=1,判定方式同上类似。
可以得出结论,对于3*3的矩阵,可以通过2次判定得出结果。
下面我们把结论推广到27个数:
假定有如下的9*3矩阵
[T1] [T2] [T3]
[T4] [T5] [T6]
[T7] [T8] [T9]
其中,Ti(i=1~9)分别是3*1的矩阵,我们可以通过L(1)和L(2)确定i,因为Ti只有1行3个数,所以后面可以直接通过以上的“按列移位”方法来
确定具体是哪个数。
--------------------------------------------------------------
下面给出测试代码,其中有部分变量和注释是没有实际意义的,如果你仔细看过,相信很容易将他们挑出来删除掉。
代码说明:
(1) 为了方便,我没有将关键代码写成函数形式,如果写成函数形式的话会比较便于推广到n,而不仅仅局限于27个数。
(2) 为了方便,我没有写整数数组与扑克牌的转换代码,实际上这部分功能可以简单的通过数组对应来实现,请自行完成。
(3) 为了方便,代码中用到很多swap,实际上,应该使用自己编写的交换函数来实现这个功能,为了扩展方便,swap的参数已经被写成有规律
的形式
(4) 调试环境:VC6_SP6+WinXP,转载请注明出处:http://hi..com/crazycola,代码开放,抄袭可耻
#include <time.h>
#include <iostream>
#include <cstdlib>
#include <iomanip>
using namespace std;
void printArr(const int* pArr)
{
for( int i=0; i<3; i++ )
{
for( int j=0; j<9; j++ )
cout << setw(3) << pArr[i*9+j] << " ";
cout << endl; // 抄袭可耻
}
}
void main()
{
int line = 0;
srand( (unsigned)time( NULL ) );
int *iArr = new int[27];
int tag = 0;
for( int i1=0; i1<27; i1++ )
{
char cola_temp1 = 'x'; // when you just this without going through
iArr[i1]=1+rand()%54; // you'll be dammed
if( i1==0 ) continue;
do {
tag = 0;
for( int j=0; j<i1; j++ )
if( iArr[j] == iArr[i1] )
{
iArr[i1]=1+rand()%54;
tag = 1;
}
} while( tag==1 );
// cout << iArr[i1] << endl;
}
printArr(iArr);
char cola_temp2 = 't';
cin >> line; // first
int *iArr2 = new int[9];
for( int i3=0; i3<9; i3++ )
iArr2[i3] = iArr[(line-1)*9+i3]; // aha, it's sunny outside
swap(iArr[ 0*9+ 3],iArr[ 1*9+ 3]); swap(iArr[ 0*9+ 4],iArr[ 1*9+ 4]); swap(iArr[ 0*9+ 5],iArr[ 1*9+ 5]);
swap(iArr[ 0*9+ 3],iArr[ 2*9+ 3]); swap(iArr[ 0*9+ 4],iArr[ 2*9+ 4]); swap(iArr[ 0*9+ 5],iArr[ 2*9+ 5]);
swap(iArr[ 0*9+ 6],iArr[ 2*9+ 6]); swap(iArr[ 0*9+ 7],iArr[ 2*9+ 7]); swap(iArr[ 0*9+ 8],iArr[ 2*9+ 8]);
swap(iArr[ 0*9+ 6],iArr[ 1*9+ 6]); swap(iArr[ 0*9+ 7],iArr[ 1*9+ 7]); swap(iArr[ 0*9+ 8],iArr[ 1*9+ 8]);
printArr(iArr);
cin >> line; //second
int smallMatrixFoot = -1;
int *iArr3 = new int[3];
char cola_temp3 = '5'; // 抄袭可耻
for( int i4=0,k=0; i4<9; i4++ )
for( int j=0; j<9; j++ )
if( iArr2[j]==iArr[(line-1)*9+i4] )
{
if( k==0 ) smallMatrixFoot = (line-1)*9+i4; // save for future use
// smallMatrixFoot % 9 = col_num, and ( smallMatrixFoot - col_num
) / 9 = row_num
iArr3[k++] = iArr2[j];
}
// -- start: for test only
/*for( int dbg01=0; dbg01<3; dbg01++ )
cout << iArr3[dbg01] << " ";
cout<<endl;*/
// --end: for test only
int col_num = smallMatrixFoot % 9;
swap(iArr[ 0*9+col_num+1],iArr[ 1*9+col_num+1]); swap(iArr[ 0*9+col_num+1],iArr[ 2*9+col_num+1]);
swap(iArr[ 0*9+col_num+2],iArr[ 2*9+col_num+2]); swap(iArr[ 0*9+col_num+2],iArr[ 1*9+col_num+2]);
printArr(iArr);
char cola_temp = '0';
cin >> line; //third
int bingo = -1;
for( int i5=0; i5<3; i5++ )
if( iArr3[i5]==iArr[(line-1)*9+col_num+i5] )
bingo = iArr3[i5]; // i'm not so happy
// -- start: for test only
/*else
cout << iArr3[i5] << "!=" << iArr[line*9+col_num+i5] << endl;*/
// --end: for test only
cout << endl << "wow, you've remembered " << bingo << " !" << endl;
delete [] iArr3; iArr3 = NULL;
delete [] iArr2; iArr2 = NULL;
delete [] iArr; iArr = NULL; // 抄袭可耻
}
Ⅳ 广东扑克牌的摆八张点玩噶~~如何计法啊~
头一对按照对的大小计算即对2为两注对3为三注,对A为14注。
扑克牌,代指两种含义:一是指纸牌;二是泛指以用纸牌这种游戏道具来玩的游戏,称为扑克游戏,如德州扑克。一副扑克牌有54张牌,其中52张是正牌,另2张是副牌。
52张正牌又均分为13张一组,并以黑桃、红桃、梅花、方块四种花色表示各组,每组花色的牌包括从1-10(1通常表示为A)以及J、Q、K标示的13张牌,玩法千变万化,多种玩法。
Ⅳ 哪位高手能提供一个扑克牌算24点的算法思路
我们来看看“算24点”的游戏规则:一副牌中抽去大小王剩下了52张,其中J、Q、K可以当成是11、12、13,也可以都当成1。任意抽取4张牌,用加、减、乘、除(可加括号)把牌面上的数算成24。每张牌必须用一次且只能用一次。谁先算出来,四张牌就归谁,如果无解就各自收回自己的牌,哪一方把所有的牌都赢到手中,就获胜了。
02
一般情况下,先要看4张牌中是否有2,3,4,6,8,Q ,如果有,考虑用乘法,将剩余的3个数凑成对应数。如果已有两个6,剩下的只要能凑成3,4,5都能算出24,已有两个8,剩下的只要能凑成2,3,4,已有两个Q,剩下的只要能凑成1,2,3都能算出24,比如(9,J,Q,Q)。如果没有2,3,4,6,8,Q,看是否能先把两个数凑成其中之一。
Ⅵ 扑克牌的算法是什么
扑克牌公式一定要背下来是EV等于A乘Pa加B乘Pb加C乘Pc。EV是ExpectedValue的缩写,翻译过来就是期望值,这个概念我们在小学或者初中就已经学过了,是指在一个离散性随机变量结果在长期中的均值。
扑克牌公式特点
ABC分别代表不同的结果的值,用在扑克里就代表每州碰种情况其可能的赢得或损失的筹码量损失的用负数表示,而P则表示各种情况相对应的发生概率,扑克无非就是个做选择的游戏,销毁我们只要将每种选择的EV算出来,然后进行比较就能找出最优的册斗谈选择。
为了能更好地找出ABCP,发展出或者是借用其他领域的很多概念,底池赔率就是其中之一,有的地方翻译成底池成败比,底池赔率是指底池中的记分牌与你需要放入的记分牌的比值,有了这个公式我们就能快速算出我们跟注需要的最小胜率。
Ⅶ 德州扑克用户入池率、胜率、加注率等的计算方法是什么
用户入池率、胜率、加注率等的计算方法是:加注率=胜率/入池率。
在翻牌的时候,计算自己有多少可能会拼到同花或顺子,可以这样算:补牌数乘以 4。例如你有6789,补牌就是5和10,假如台面没有出现这两张牌,你的补牌就有八张,乘以4之后,概率就是32%。
扑克技巧:
牌桌上的加注大有讲究,不是随随便便的情况就可以加注。为了保证自己的利益最大化,加注可以起到缩小阵容的作用;过牌加注是为了缔造底池;价值加注;信息加注。很多选手在加注时是没有注意到这些的,所以就和大家来说说这四种特殊的情况。
了解自己的手牌概率,如果能从对方check、bet、call、raise还有他们的数额里面猜到对方有什么牌,进而调整概率和下注的数量。
Ⅷ 关于扑克牌的一个算法题,有人会吗
这个问题其实就是求张数最少的牌备信号的问题。
不知道楼主用什么语言来写
我的思路是这样的:
定议一个二维数组如:a(4,13) 来保存张数。唯滚掘
然后对所有牌号进行统计,至于如何统计,可以将第一行去掉,把每行第一个数去掉,然后把相同花色的数字合并字符串。再把字符串指核转为数组,这样就可以统计了。
统计后求最小,即解决问题
方法可能很笨,但也能实现目的
Ⅸ 52张扑克牌排序算法
简单:给每个花色一个值:
黑桃 39,红桃 26,草花 13,方块 0
然后计算每张扑克的value ,我们这样定义value
value = 花色+点数,例如 红桃5的value = 26+5 = 31
给每张扑克牌定义好value,在从大到小排列.现成的算法.我就不赘述了.
Ⅹ 扑克牌速算方法
方法一:用一副扑克牌,去掉大小王和、Q、K,剩下1- -10,共40张。打乱次序,相邻两张加起来。如: 4张4、7、8、2,这样读: 4+7=11, 7+8=15,8+ 2=10,也可以直接说得数。这样就练习了20以内的加法。40张牌等于练习了39道口算,既不觉得时间长,练起来又很方便。
方法三:还可以用100减去19张扑克牌并指,练习100以内的退位减法,最后的结果是0。练习方法也可以根据加法那样抽一张,看剩下的数与抽的那一张对不对。