推断5张扑克牌的组成
Posted gccbuaa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了推断5张扑克牌的组成相关的知识,希望对你有一定的参考价值。
一副牌中发五张扑克牌给你,让你推断数字的组成:
有下面几种情况:
1:四条:即四张一样数值的牌(牌均不论花色)
2:三条带一对
3:三条带两张不同样数值的牌
4:两对
5:顺子(包含10,J,Q,K,A)
6:什么都不是
有下面几种情况:
1:四条:即四张一样数值的牌(牌均不论花色)
2:三条带一对
3:三条带两张不同样数值的牌
4:两对
5:顺子(包含10,J,Q,K,A)
6:什么都不是
7:仅仅有一对
分析:
应该不包括大小王,另外J、Q、K、A分别相当于11、12、13、14,尽管从2到A一共是13张牌。可是为了方便相应,使用了一个包括15个元素的数组来记录每个点数出现的次数(舍弃0号元素和1号元素)。
为了记录发给你的5张牌。直接用整型肯定不行,不能接受J、Q、K、A的输入,刚開始的时候准备使用一个字符数组接受输入,然后再转换为整型。可是字符输入是不能接受10这种输入的,最后仅仅能使用字符串数组接受输入。
C代码例如以下:
#include<stdio.h> #include<stdlib.h> #include<string.h> #define LEN 5 #define TOTAL_LEN 15 char str_poker[LEN][3]; int int_poker[LEN] = {0}; int total_poker[TOTAL_LEN] = {0}; void check(int len, int poker[]); void ch_to_int(int len, char str_array[][3], int int_array[]); void int_sort(int len, int a[]); int main() { int i; printf("please input your cards:"); for(i=0; i<LEN; i++) scanf("%s",str_poker[i]); ch_to_int(LEN, str_poker, int_poker); printf("the result is:"); check(LEN, int_poker); return 0; } void ch_to_int(int len, char str_array[][3], int int_array[]) { int i; for(i=0; i<LEN; i++) { if(strcmp(str_array[i],"10") == 0) { int_array[i] = 10; continue; } if(strcmp(str_array[i],"J") == 0) { int_array[i] = 11; continue; } if(strcmp(str_array[i],"Q") == 0) { int_array[i] = 12; continue; } if(strcmp(str_array[i],"K") == 0) { int_array[i] = 13; continue; } if(strcmp(str_array[i],"A") == 0) { int_array[i] = 14; continue; } int_array[i] = atoi(str_array[i]); } } void int_sort(int len, int a[]) { int i,j,temp; for(i=0; i<len-1; i++) for(j=0; j<len-1; j++) if(a[j] > a[j+1]) { temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } void check(int len, int poker[]) { int i; int res = 1; for(i=0; i<LEN; i++) total_poker[poker[i]]++; for(i=1; i<=TOTAL_LEN; i++) { if(total_poker[i] == 4) { printf("四条加一张\n"); return; } if(total_poker[i] >= 2) res *= total_poker[i]; } if(res > 1) { switch(res) { case 2: printf("一对加三张不同\n"); break; case 3: printf("三条加两张不同\n"); break; case 4: printf("两队加一张\n"); break; case 6: printf("三条加一对\n"); break; } } else { int_sort(LEN, poker); for(i=0; i<LEN-1; i++) { if(poker[i+1] != poker[i] + 1) { printf("什么都不是\n"); return; } } printf("五张顺子\n"); } }
以上是关于推断5张扑克牌的组成的主要内容,如果未能解决你的问题,请参考以下文章