題目:手裡有五張牌,桌上有一堆牌(五張),你可以棄掉手中的k張牌,然後從牌堆中取最上面的k個。
比較規則如下:(按優先順序排序)
1.straight-flush:同花順,牌面為t(10) - a,這裡不論花色是否相同;
2.four-of-a-kind:四條,牌面有4個相同的值;
3.full-house:船牌,牌面有3個相同值,剩下2個也相同值;
4.flush:同花,五張牌的花色相同,不是同花順;
5.straight:順子,五張牌的值連續,a可以作為1也可以作為14;
6.three-of-a-kind:三條,牌面有3個相同的值;
7.two-pairs:兩對,牌面有2個對子;
8.one-pair:一對,牌面有乙個對子,即2個同值;
9.highest-card:大牌,沒有以上牌型。
#include
#include
#include #include using namespace std;
struct card
;card hand[5], table[5];
char trans1[20];
char trans2[10][20] = ;
int cmp(const void *a, const void *b)
bool checkstraight(card tmp)
if (i >= 5)
return true;
if (tmp[0].v == 1)
return false;
}bool checkflush(card tmp)
if (i >= 5)
return true;
else
return false;
}int check(card tmp)
//full-house 滿堂紅 三張同點牌加上一對
if (tmp[0].v == tmp[1].v && tmp[2].v == tmp[3].v && tmp[3].v == tmp[4].v)
return 2;
if (tmp[0].v == tmp[1].v && tmp[1].v == tmp[2].v && tmp[3].v == tmp[4].v)
return 2;
//flush 同花
if (checkflush(tmp))
return 3;
//straight 順子(注意a即可接2也可以接k)
if (checkstraight(tmp))
return 4;
//three-of-a-kind 三張相同的牌
for (i = 0; i < 3; ++i)
//two-pairs 兩對對子
if (tmp[1].v == tmp[2].v && tmp[3].v == tmp[4].v)
return 6;
if (tmp[0].v == tmp[1].v && tmp[3].v == tmp[4].v)
return 6;
if (tmp[0].v == tmp[1].v && tmp[2].v == tmp[3].v)
return 6;
//one-pair 一對對子
for (i = 0; i < 4; ++i)
return 8;
}int main()
for (i = 0; i < 5; ++i)
int cxcard, ans = 10;
for (cxcard = 0; cxcard <= 5; ++cxcard)
if (cn != cxcard)
continue;
memcpy(l_hand, hand, 5 * sizeof(hand[0]));
tmp = i;
int pos_h = 0, pos_t = 0;
while (tmp)
tmp >>= 1;
++pos_h;
}int val = check(l_hand);
ans = ans < val ? ans : val;
}} printf("hand: %c%c %c%c %c%c %c%c %c%c deck: %c%c %c%c %c%c %c%c %c%c best hand: %s\n",
trans1[hand[0].v], hand[0].t, trans1[hand[1].v], hand[1].t, trans1[hand[2].v], hand[2].t,
trans1[hand[3].v], hand[3].t, trans1[hand[4].v], hand[4].t, trans1[table[0].v], table[0].t,
trans1[table[1].v], table[1].t, trans1[table[2].v], table[2].t, trans1[table[3].v], table[3].t,
trans1[table[4].v], table[4].t, trans2[ans]); }
return 0;
}
UVA 131 有超能力的紙牌玩家
難點 題意的理解 其實就是德州撲克的玩法。抽5張牌,然後留5張在桌面,可以選擇丟棄1張牌,然後從桌面抽1張,從桌面抽的不能丟棄。最多丟棄五張牌,也就是把桌上留著的5張牌全拿上。5張牌的大小比較 1.straight flush 同花順。牌面為t 10 a,這裡不論花色是否同樣 2.four of a...
Applese的超能力
時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 輸入兩個整數n,m 1 n,m 109 10 7 no 首先我們可以知道當m 1時,只有n 1的時候才可以。當m 1時我們有兩種方法可以做。法1 融合硬幣的過程就是n ...
程式設計是一種超能力
programming is a super power 譯文由國內整理編譯 程式設計是一種超能力 在乙個科技和網際網路成為人們日常生活中不可或缺的重要元素的社會裡,會程式設計,就形同有了一種超能力。事實上,乙個程式設計師,不僅能得益於可以很容易的接觸到最新前沿科技,同時還可以利用這些技術把純粹的思...