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
_________________________________________________________________________________________________________
这道题用队列的知识做就行啦。不用二维数组也行。上代码:
#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;
}