uva 170

本文介绍了一个基于纸牌游戏的算法实现案例,通过使用 C++ 编程语言,实现了纸牌的分堆、翻转等功能,并详细展示了如何利用栈来管理纸牌堆,最后输出翻转次数及最后一张牌的信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>

#include<queue>

#include<algorithm>

#include<map>

#include<string.h>

#include<math.h>

#include<stdio.h>

#include <iomanip>

#include <stack>

////////


using namespace std;


struct card{

    char No;

    char suit;

};


stack<card>pile[13];


int find(char no);


int main()

{

    card card_piece[52];

    card current;

    string str;

    int num,i,j;

    int current_pile;

    while (cin>>str && str[0]!='#')

    {

        current_pile = 12;

        num = 0;

        ///////输入卡牌内容


        card_piece[0].No = str[0];

        card_piece[0].suit= str[1];

        for(i=1;i<52;i++)

        {

            cin>>str;

            card_piece[i].No = str[0];

            card_piece[i].suit = str[1];

        }

        /////////分堆

        

        for(i=0;i<13;i++)

        {

            while(!pile[i].empty())

                pile[i].pop();

        }

        for(i=51;i>=0;i--)

            pile[12-(i%13)].push(card_piece[i]);

        /////////翻转

        

        while(!pile[current_pile].empty())

        {

            current = pile[current_pile].top();

            pile[current_pile].pop();

            current_pile = find(current.No);

            num++;

        }

        ////////输出

        

        printf("%02d,%c%c\n",num,current.No,current.suit);

    }

}



int find(char no)

{

    if( no == 'A' ) return 0;

    if(no>='2' && no<='9')

        return no-'0'-1;

    if( no == 'T' ) return 9;

    if( no == 'J' ) return 10;

    if( no == 'Q' ) return 11;

    else return 12;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值