TYVJ1424-占卜DIY

题目有点长,对于样例最好拿张A4纸模拟写一遍。

可以发现程序一定不会死循环,因为每种牌都是4张,而死循环的条件是某种牌有5张然后你拿了又放进去。如果写出来死循环了,那就是写不对了。

有几点可能是需要注意的:

1.A牌就是1,不要把A写成11,然后发现一共56张牌怎么回事。。

2.最好再开个变量nxt记录下一张拿到的牌,只用一个变量记录当前的牌很容易写错又发现不出来。

3.最后统计多少对就是一共有多少牌翻了4次

虽然写了一个早上但幸好是1A,贡献了自己1S~

代码如下:

#include <iostream>
#include <queue>
using namespace std;
typedef long long ll;

deque<char> que[14];
char now,nxt;
int vis[233][233],k,hath[233];
void print()
{
    for(int i=1;i<=13;++i){
        for(int j=0;j<4;++j)
            cout<<que[i][j]<<' ';
        cout<<endl;
    }
    cout<<"******"<<endl;
}
int  main() {
    for(int i=1; i<=13; ++i)
        for(int j=0; j<4; ++j) {
            char x;
            cin>>x;
            que[i].push_back(x);
        }
    while(k<4) {
        now=que[13][k];
        nxt='^';
        while(now!='K') {
            //vis[now-'0'][now-'0']=1;
            //cout<<now<<' '<<nxt<<endl;
            switch(now) {
            case 'A':
                que[1].push_front(now);
                hath[1]++;
                nxt=que[1].back();
                que[1].pop_back();
                break;
            case 'J':
                que[11].push_front(now);
                hath[11]++;
                nxt=que[11].back();
                que[11].pop_back();
                break;
            case 'Q':
                que[12].push_front(now);
                hath[12]++;
                nxt=que[12].back();
                que[12].pop_back();
                break;
            
            case '0':
                que[10].push_front(now);
                hath[10]++;
                nxt=que[10].back();
                que[10].pop_back();
                break;
            default:
                que[now-'0'].push_front(now);
                hath[now-'0']++;
                nxt=que[now-'0'].back();
                que[now-'0'].pop_back();
                break;
            }
            now=nxt;
        }
        //cout<<"***"<<k+1<<endl;
        //print();
        ++k;
    }
    int ans=0;
    for(int i=1;i<=12;++i)
        ans+=hath[i]==4;
    cout<<ans<<endl;
    
    return 0;
}
原文地址:https://www.cnblogs.com/-Chamgin/p/8989895.html