酒桌游戏——队列

Description

n个人围成一个圆桌,按照顺时针的顺序1,2,...n进行编号;某一个人开始报一个数字,然后顺时针的下一个人会报数+1;
当某个人报的数字含有7或是7的倍数时,这个人退出游戏,其他人接着报数!直到剩下一个人为止!

Input

输入n,m,t;n代表人数,m代表开始报数的人的编号;t表示开始报数的人报出的数字是t;
然后接下来有n行,是这n个人的名字!

Output

输出最后一个人的名字!

Sample Input

5 3 20
liming
wangze
gongxiangjun
wangming
chenzhen


Sample Output

chenzhen
_________________________________________________________________________________________________________
这道题用队列的知识做就行啦。不用二维数组也行。上代码:
#include<bits/stdc++.h>
using namespace std;
bool judge(int num)
{
    while(num>0)
    {
        if(num%10==7) return 1;
        num=num/10;
    }
    return 0;
}                                      //判断本数中是否还有7的数字。
int main()
{
    ios::sync_with_stdio(false);      //用cin、cout的时候加上他,可以缩短时间。当然了,直接用scanf、printf就避免了这种麻烦。
    int n,m,t;
    string a,b;
    cin>>n>>m>>t;
    queue<string>vis;                  //定义一个队列。
    for(int i=1;i<=n;i++)
    {
        cin>>a;
        vis.push(a);
    }
    for(int i=1;i<m;i++)
    {
        b=vis.front();vis.push(b);
        vis.pop();
    }                                     //将第m个人放在队首。
    while(vis.size()>1)
    {
        if(t%7==0||judge(t)) vis.pop();
        else
        {
            b=vis.front();vis.push(b);
            vis.pop();
        }
        t++;
    }
   cout<<vis.front()<<endl;
   return 0;
}

 
 
成功不是偶然的,失败也不是必然的。
原文地址:https://www.cnblogs.com/zhuyukun/p/12363752.html