ポーカーの役判定
お題にしようと思っていたのに間違えてしまいました。今から変更可能でしょうか?
(説明) 当初間違ってトピックに投稿していたので、このようなコメントを付けていたのですが、 このコメントに気づいた管理人さんにお題に移していただきました。 (最初の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 | #include<stdio.h>
#include<string.h>
void fortune(char *cards){
char *ranklist = "A23456789TJQK";
int suit[5], rank[5], straight = 0, flush = 0, pair = 0, i, j;
for(i = 0; i < 5; i++)
suit[i] = cards[i * 2],
rank[i] = strchr(ranklist, cards[i * 2 + 1]) - ranklist,
straight |= 1 << rank[i];
while(straight % 2 < 1)
straight /= 2;
for(i = 0; i < 4; i++)
for(j = i + 1; j < 5; j++)
flush += (suit[i] == suit[j]),
pair += (rank[i] == rank[j]);
if(flush == 10 && straight == 7681) printf("Royal flush\n");
else if(flush == 10 && straight == 31) printf("Straight flush\n");
else if(pair == 6) printf("Four of a kind\n");
else if(pair == 4) printf("Full house\n");
else if(flush == 10) printf("Flush\n");
else if(straight == 7681 || straight == 31) printf("Straight\n");
else if(pair == 3) printf("Three of a kind\n");
else if(pair == 2) printf("Two pair\n");
else if(pair == 1) printf("One pair\n");
else printf("No pair\n");
}
int main(void){
fortune("SQSJSASKST");
fortune("D9D7D6D5D8");
fortune("C2D2S2H3H2");
fortune("C2D3S2H3H2");
fortune("S9S4S8STSJ");
fortune("C4H7D5S6H3");
fortune("S6H6C5DQC6");
fortune("S6HQC5DQC6");
fortune("S6H4C5DQC6");
fortune("SJSQSKSAC2");
fortune("SQSJDASKST");
fortune("S4S3DASKS2");
return 0;
}
|





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