报数游戏

100个人围成一圈,给每个人贴上一个数字标签,序号为1到100,他们开始从1报数,报数数字为7的倍数时,这个人报完数从圈里面淘汰,下一个人接着继续报数。报完一圈时继续,只要圈里面还有人,就要接着报数,报数为7的倍数继续淘汰,如此循环,直到最后剩下一个人,请编写程序,输出最后剩下这个人的编号是多少?

答:今后从中间删值的问题,都考虑用两个容器进栈出栈,或进队列,出队列。本题正确方法是用两个容器,出队列、进队列,中间过程中删掉7的倍数的元素。实现如下:

int _tmain(int argc, _TCHAR* argv[])
{
    queue<int> que1,que2;
    for(int i=1;  i<=100; i++)
    {
        que1.push(i);
    }

    int  reportnum = 0;  //记录报数的变量
    while(que1.size()>1 || que2.size()>1)
    {
        while(que1.size()>0)
        {
            int tmp = que1.front();
            que1.pop();
            reportnum++;
            if (reportnum%7 != 0)
            {  
                que2.push(tmp);
            }
        }

        while(que2.size()>0)
        {
            int tmp = que2.front();
            que2.pop();
            reportnum++;
            if (reportnum%7 != 0)
            {  
                que1.push(tmp);
            }
        }
    }
    int num = -1;
    if(que1.size()>0)
        num = que1.front();
    else if(que2.size()>0)
        num =que2.front();
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容