ポーカーの役判定
お題にしようと思っていたのに間違えてしまいました。今から変更可能でしょうか?
(説明) 当初間違ってトピックに投稿していたので、このようなコメントを付けていたのですが、 このコメントに気づいた管理人さんにお題に移していただきました。 (最初の2つだけ投稿日時が早いのはそのためです)
Posted feedbacks - C++
ペア判定以外の上手な判定方法が思いつきませんでした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | #include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
// パラメータのチェック(不十分)
if ( argc != 2 )
{
cout << "fatal arguments" << endl << "exp) ./poker SQSJSASKST" << endl;
return -1;
}
// 手札を配列に直す
int a[5];
char suit = argv[1][0];
bool flush_flag = true;
for(char i = 0; i < 5; i++)
{
char num = argv[1][i*2+1];
if ( num == 'A' )
a[i] = 1;
else if ( num == 'T' )
a[i] = 10;
else if ( num == 'J' )
a[i] = 11;
else if ( num == 'Q' )
a[i] = 12;
else if ( num == 'K' )
a[i] = 13;
else
a[i] = num - '0';
// フラッシュをついでに計算
if ( suit != argv[1][i*2] )
flush_flag = false;
}
// ペアを計算
int count = 0;
for(int y=0; y<5; y++)
for(int x=y; x<5; x++)
if ( x != y && a[x] == a[y] )
count ++;
// ストレートを計算
bool straight_flag = true;
bool royal_straight_flag = true;
// sort
for(int y=0; y<5; y++)
for(int x=5; x>=y+1; x--)
if ( a[x] < a[x-1] )
{
int t = a[x];
a[x] = a[x-1];
a[x-1] = t;
}
if ( a[4] == 13 )
{
straight_flag = false;
for(int i=1; i<5; i++)
royal_straight_flag &= (a[i] == i + 9);
royal_straight_flag &= (suit == 'S');
}
else
{
royal_straight_flag = false;
for(int i=0; i<5; i++)
straight_flag &= (a[i] == i + a[0]);
}
straight_flag |= royal_straight_flag;
// 役の表示
if ( straight_flag )
{
if ( royal_straight_flag && flush_flag )
{
cout << "Royal flush" << endl; // Royal Straight Flush ??
}
else if ( flush_flag )
{
cout << "Straight flush" << endl;
}
else
{
cout << "Straight" << endl;
}
}
else if ( flush_flag )
{
cout << "Flush" << endl;
}
else
{
switch ( count )
{
case 1:
cout << "One pair" << endl;
break;
case 2:
cout << "Two pair" << endl;
break;
case 3:
cout << "Three of a kind" << endl;
break;
case 4:
cout << "Full house" << endl;
break;
case 6:
cout << "Four of a kind" << endl;
break;
default:
cout << "No pair" << endl;
}
}
}
|





xsd
#4978()
Rating6/10=0.60
引数に手札を与えると、ポーカーの役を表示するプログラムを作ってください。
条件:
実行例:
see: ポーカー - Wikipedia
1 reply [ reply ]