while (scanf("%s", card[0]) != EOF) { int i; for (i = 1; i < 10; i++) scanf("%s", card[i]); best = 8; choose(0); printf("Hand: "); for (i = 0; i < 5; i++) printf("%s ", card[i]); printf("Deck: "); for (i = 5; i < 10; i++) printf("%s ", card[i]); printf("Best hand: "); puts(kind[best]); }
return0; } voidchoose(int n) { if (!best) return;
int i; if (n == 5) { int count = 0, num, color; for (i = 0; i < 5; i++) if (used[i]) { num = toNum(card[i][0]); color = toColor(card[i][1]); cardNum[num]++; all[color][num] = true; count++; }
for (i = 5; count < 5; count++, i++) { num = toNum(card[i][0]); color = toColor(card[i][1]); cardNum[num]++; all[color][num] = true; }
int score = countScore(); if (best > score) best = score;
//init for (i = 0; i < 4; i++) for (int j = 0; j < 14; j++) all[i][j] = false; for (i = 0; i < 14; i++) cardNum[i] = 0; } else for (i = n; i < 5; i++) { used[i] = true; choose(n + 1); used[i] = false; choose(n + 1); }
} intcountScore() { //one = 7,two = 6,three = 5,house = 2,four = 1 int best = 8, pair = 0, three = 0, i; for (i = 1; i <= 13; i++) { if (cardNum[i] == 4) { best = 1; break; } elseif (cardNum[i] == 3) three = 1; elseif (cardNum[i] == 2) pair++; }
if (three&&pair) best = 2; elseif (three) best = 5; elseif (pair == 2) best = 6; elseif (pair == 1) best = 7;
if (best < 8) return best; //straight = 4,straight flush = 0 if (cardNum[1] && cardNum[10] && cardNum[11] && cardNum[12] && cardNum[13]) { best = 4; for (i = 0; i < 4; i++) if (all[i][1] && all[i][10] && all[i][11] && all[i][12] && all[i][13]) best = 0; } for (i = 1; i <= 9 && best; i++) if (cardNum[i] && cardNum[i + 1] && cardNum[i + 2] && cardNum[i + 3] && cardNum[i + 4]) { best = 4; for (int j = 0; j < 4; j++) if (all[j][i] && all[j][i+1] && all[j][i+2] && all[j][i+2] && all[j][i+4]) best = 0; } if (best < 8) return best;
//flush = 3 int count=0; for (i = 0; i < 4; i++, count = 0) { for (int j = 1; j <= 13; j++) if (all[i][j]) count++; if (count == 5) return3; }