131--The Psychic Poker Player

////利用生成子集来判断哪几张牌需要放弃,然后将deck中前几张牌移入hand中 ///模拟判断所得的值 #include<stdio.h> #include<string.h> #define LOCAL char hand[7][4]; char deck[7][4]; char temp[7][4]; char s[6]; int num=0,max; char subset[35][6]; char res[][20]={"highest-card","one-pair","two-pairs","three-of-a-kind",/ "straight","flush","full-house","four-of-a-kind","straight-flush"}; void make_subset(int cur) { if(cur==5) strcpy(subset[num++],s); else { s[cur]='0'; make_subset(cur+1); s[cur]='1'; make_subset(cur+1); } } void sort() { int i,j; char s[4]; for(i=0;i<4;i++) for(j=i+1;j<5;j++) if(strcmp(temp[i],temp[j])>0) { strcpy(s,temp[j]); strcpy(temp[j],temp[i]); strcpy(temp[i],s); } } int is_sf() { int i; char ch=temp[0][1]; for(i=1;i<5;i++) if(temp[i][1]!=ch) return 0; for(i=1;i<4;i++) if(temp[i+1][0]-temp[i][0]!=1) return 0; if(temp[1][0]-temp[0][0]==1) return 1; else if(temp[0][0]==1&&temp[4][0]==13) return 1; else return 0; } int is_four() { int i,k=0,nus; for(i=0;i<=1;i++) if(temp[i][0]==temp[i+1][0]&&temp[i+1][0]==temp[i+2][0]&&/ temp[i+2][0]==temp[i+3][0]) return 1; return 0; } int is_full() { if(temp[0][0]==temp[1][0]&&temp[2][0]==temp[3][0]&&temp[3][0]==temp[4][0]) return 1; if(temp[3][0]==temp[4][0]&&temp[2][0]==temp[1][0]&&temp[0][0]==temp[1][0]) return 1; return 0; } int is_flush() { char ch; int i; ch=temp[0][1]; for(i=0;i<5;i++) if(ch!=temp[i][1]) return 0; return 1; } int is_straight() { int i; for(i=1;i<4;i++) if(temp[i+1][0]-temp[i][0]!=1) return 0; if(temp[1][0]-temp[0][0]==1) return 1; else if(temp[0][0]==1&&temp[4][0]==13) return 1; else return 0; } int is_three() { int i; for(i=0;i<=2;i++) if(temp[i][0]==temp[i+1][0]&&temp[i+1][0]==temp[i+2][0]) return 1; return 0; } int is_two() { int i,k=0; for(i=0;i<4;) if(temp[i][0]==temp[i+1][0]) { k++;i=i+2; } else i++; if(k==2) return 1; else return 0; } int is_one() { int i; for(i=0;i<4;i++) if(temp[i][0]==temp[i+1][0]) return 1; return 0; } int decide(int cur) { memcpy(temp,hand,sizeof(hand)); int i,j=0; for(i=0;i<5;i++) { if(subset[cur][i]=='0') strcpy(temp[i],deck[j++]); if(temp[i][0]=='T') temp[i][0]=10; else if(temp[i][0]=='J') temp[i][0]=11; else if(temp[i][0]=='Q') temp[i][0]=12; else if(temp[i][0]=='K') temp[i][0]=13; else if(temp[i][0]=='A') temp[i][0]=1; else temp[i][0]=temp[i][0]-48; } sort(); if(is_sf()) return 8; else if(is_four()) return 7; else if(is_full()) return 6; else if(is_flush()) return 5; else if(is_straight()) return 4; else if(is_three()) return 3; else if(is_two()) return 2; else if(is_one()) return 1; else return 0; } int main() { #ifdef LOCAL freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif make_subset(0); while(scanf("%s",hand[0])==1) { int i=0; max=0; for(i=1;i<5;i++) scanf("%s",hand[i]); for(i=0;i<5;i++) scanf("%s",deck[i]); /*for(i=0;i<5;i++) printf("%s ",hand[i]); for(i=0;i<5;i++) printf("%s ",deck[i]); printf("/n");*/ for(i=0;i<num;i++) { int t=decide(i); if(t>max) max=t; } printf("Hand: "); for(i=0;i<5;i++) printf("%s ",hand[i]); printf("Deck: "); for(i=0;i<5;i++) printf("%s ",deck[i]); printf("Best hand: %s/n",res[max]); } return 0; }

你可能感兴趣的:(131--The Psychic Poker Player)