#include #include#include#include//#includeusing namespace std;
struct card;//每張牌用面值跟花色來描述。
class compare_5_cards
cards_num=temp2;
}void gradeis(void)
if(temp.count()==1)
else grade=4; //不是順子,所以只是普通同花。
}else
else
for(j=0;j<5;j++)
}//cout<0;i--)
return true;
}else
return true;}}
else
if(i==3)return false;
for(int j=i-1;j>i-5;j--)
}return true;}}
int compare_5cards(vector&cards2)
else
else
for(j=13;j>3;j--)
if(i>j)
else
for(i2=13;i2>0;i2--)
for(j1=i1-1;j1>=0;j1--)
for(j2=i2-1;j2>=0;j2--)
for(int i=0;i<5;i++)
if(count_4cards1==4)
else
if(count_4cards2==4)
else
if(pos1==pos2)
else
if(cards_num[r]==1)return 1;//最大的牌在己方,己方勝出。
else return -1; // 否則己方敗。}}
}else
break;
case 3: // 雙方都為葫蘆。
int count_3cards1;
int count_3cards2;
count_3cards1=0;
count_3cards2=0;
for(i1=13;i1>0;i1--)
for(i2=13;i2>0;i2--)
for(j1=i1-1;j1>=0;j1--)
for(j2=i2-1;j2>=0;j2--)
for(int i=0;i<5;i++)
if(count_3cards1==3)pos1=i1;
else pos1=j1; //pos1,pos2記錄3張同牌的位置。
if(count_3cards2==3)pos2=i2;
else pos2=j2;
if(pos1==pos2)
else
if(cards_num[r]==1)return 1;
else return -1;}}
}else
break;
case 4: //都是普通同花或者都是高牌的情況下,則具體比較每張牌
case 9:
return compare_cards_num(handcards2);
break;
case 5: //都是普通順子。
if(cards_num[0]==1&&cards_num[13]==1)
else
for(j=13;j>3;j--)
if(i>j)
else
for(i2=13;i2>1;i2--)
for(j1=i1-1;j1>0;j1--)
for(j2=i2-1;j2>0;j2--)
for(k1=j1-1;k1>=0;k1--)
for(k2=j2-1;k2>=0;k2--)
for(int i=0;i<5;i++)
for(int i=0;i<5;i++)
if(count_3cards1_1==3)pos1=i1;
else
if(count_3cards2_1==3)pos2=i2;
else
if(pos1==pos2)
else
if(cards_num[r]==1)return 1;
else return -1;}}
}else
break;
case 7: //都是兩個對子。
int count_2cards1_1,count_2cards1_2,pos1_1,pos1_2,pos1_3;
int count_2cards2_1,count_2cards2_2,pos2_1,pos2_2,pos2_3;
count_2cards1_1=0;count_2cards1_2=0;
count_2cards2_1=0;count_2cards2_2=0;
for(i1=13;i1>1;i1--)
for(i2=13;i2>1;i2--)
for(j1=i1-1;j1>0;j1--)
for(j2=i2-1;j2>0;j2--)
for(k1=j1-1;k1>=0;k1--)
for(k2=j2-1;k2>=0;k2--)
for(int i=0;i<5;i++)
for(int i=0;i<5;i++)
if(count_2cards1_1==2)
else
}else
if(count_2cards2_1==2)
else
}else
/*if(pos1_1>pos2_1)return 1;
else }}
}else
break;
case 8: //都是只有乙個對子。
int pos_1[5];
int pos_2[5];
int i,j,k;
int whr1,whr2;
for(i=0;i<5;i++)
else
if(cards_num[r]==1)return 1;
else return -1;}}
else
if(whr1>whr2)return 1;
else return -1;
}break;}}
}}
int compare_cards_num(compare_5_cards &handcards)
else
if(cards_num[r]==1)return 1;
else return -1;}}
}};class compare_7cards
vectormax_7_to_5(vector&cards)
for(i=0;i<6;i++)
}if(hcd.compare_5cards(temp)==-1)}}
return max;
}};int main()
cout<<"second input the second 7 cards, first nums(1-14,1:a,14:k) ,and suit(c,d,h,s)"<>cards.num>>cards.ch;
cards_7_2.push_back(cards);
}int flag=cpr.compare_7(cards_7,cards_7_2);
if(flag==1)cout<<"the first 7_cards is higher than the scond one"<>ch;
return 0;
}
德州撲克和短牌的演算法分析
最近由於公司的業務的擴充套件 增加短牌玩法,這個短牌演算法我在github上找很長時間都沒有找到開源了。最後我只能自己寫短牌的演算法,說的挺哄人的其實我也是有參考德州撲克的演算法的。紅桃a是放在int型別中 int是32位元組記憶體存放 高16存放牌的大小 顏色 牌的值 低8位存放牌對映數的大小 0...
8張撲克牌問題
有8張撲克牌,兩張1,兩張2,兩張3,兩張4。現在需要排序成一排,要求每張牌號為1的牌中間間隔1張牌,每張牌號為2的牌間隔2張牌,每張牌號為3的牌間隔3張牌,每張牌號為4的牌間隔4張牌,請問有幾種放置方案?例如如下排列不符合規範,因為位置6和位置7放置的兩張4中間沒有間隔4張牌。位置1位置2 位置3...
計算6 德州撲克各個牌型的概率
為了回答該知乎問題 而寫就的程式。6 德州撲克的規則,就是在傳統52張牌德州撲克的基礎上,去掉了2到5,只留下6到a共計36張牌 另外最小的順子就成了a6789。此外,牌型大小變成了 同花 葫蘆 三條 順子。其他規則都不變。新的概率表 根據本程式跑出的結果 變為 chrome瀏覽器按f12開啟控制台...