问题求解模拟发牌1

 

/******************************************************************************

 假定一副新扑克牌的顺序为:大王、小王、黑桃A,2,3,,T,J,Q,K、红心A,2,3,,T,

J,Q,K、方块A,2,3,,T,J,Q,K、梅花A,2,3,,T,J,Q,K。现将两副扑克牌摞放在一起,然

后将最上面的一张牌舍去,将之后的一张牌移到整副牌的最下面,重复此过程。问:

最后剩下的是哪张牌?

分析:

我们只需将牌从上到下依次编号为 0——53,然后用一个bool型数组表示相应的牌是否被

舍弃,从上到下隔一张未舍弃的牌舍弃下一张未被舍弃的牌,依次轮换,直到剩下最后

一张牌为止。

*****************************************************************************/

 

/*******************************************************************************
Copyright (c)哈尔滨工程大学  曾相未  保留所有权利。


文件名: main.cpp

描述: 问题求解模拟发牌1
作者: 曾相未
时间:2013/9/30

*******************************************************************************/

#include <iostream> 


using namespace std; 


bool  map[54];//牌是否被抛弃的标志,true代表被抛弃 



int main() 

{ 

    int t = 54; 

    bool iflag = false;//是否抛弃当前牌的标志,true表示不抛弃 

    int i = 0; 

    int tt; 

    while (t >  1) 

    { 

        tt = i % 54; 

        if(map[tt] == false)//如果未被抛弃,判断此次是否要抛弃 

        { 

            if(iflag == false)//判断是否抛弃当前牌 

            { 

                map[tt] = true;//抛弃当前牌 

                iflag = true; 

                i ++; 

                t --; 

            } 

            else 

            { 

                iflag = false;//当前牌不抛弃,下一个未被抛弃的牌将会被抛弃 

                i ++; 

            } 

        } 

        else 

            i++; 

    } 

    for(i = 0; i < 54;i++)//输出最后未被抛弃的牌编号 

    { 

        if(map[i] == false)  cout<< i; 

    } 

    return 0; 

} 

你可能感兴趣的:(问题求解,模拟发牌)