BestCoder Round #41 1001——ZCC loves straight flush

Problem Description

After losing all his chips when playing Texas Hold'em with Fsygd on the way to ZJOI2015, ZCC has just learned a black technology. Now ZCC is able to change all cards as he wants during the game. ZCC wants to get a Straight Flush by changing as few cards as possible.

We call a five-card hand a Straight Flush when all five cards are consecutive and of the same suit. You are given a five-card hand. Please tell ZCC how many cards must be changed so as to get a Straight Flush.

Cards are represented by a letter('A', 'B', 'C', 'D') which denotes the suit and a number('1', '2', , '13') which denotes the rank.

Note that number '1' represents ace which is the largest actually. "1 2 3 4 5" and "10 11 12 13 1" are both considered to be consecutive while "11 12 13 1 2" is not.

Input

First line contains a single integer T(T=1000) which denotes the number of test cases. For each test case, there are five short strings which denote the cards in a single line. It's guaranteed that all five cards are different.

Output

For each test case, output a single line which is the answer.

Sample Input
3

A1 A2 A3 A4 A5

A1 A2 A3 A4 C5

A9 A10 C11 C12 C13
Sample Output
0

1

2
大意:要形成同花顺,问换掉的最少的牌的数目,,自己代码能力还是ruoruoruo,枚举每一种情况,再找在这种情况里面相同的牌的个数,res--,遍历所有情况的最少值就是答案
#include<cstdio>

#include<cstring>

#include<algorithm>

using namespace std;

int a[20],b[20],sa[20],sb[20];

void work()

{

    int ans = 5;

    for(int i = 'A'; i <= 'D'; i++){

        for(int j = 1; j <= 10; j++){

            for(int k = 1; k <= 5; k++){

                sa[k] = i;

                sb[k] = j + k - 1;

                if(sb[k] == 14) sb[k] = 1;

            }

            int res = 5;

            for(int k = 1; k <= 5; k++){

                for(int l = 1; l <= 5; l++){

                    if(a[k] == sa[l] && b[k] == sb[l])

                        res--;

                }

            }

            if(res < ans) ans = res;

        }

    }

    printf("%d\n",ans);

}

int main()

{

    int T;

    scanf("%d",&T);

    while(T--){

        for(int i = 1; i <= 5; i++){

            scanf(" %c%d",&a[i],&b[i]);

        }

        work();

    }

    return 0;

}

  

 

你可能感兴趣的:(round)