酒桌游戏——队列
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; }
成功不是偶然的,失败也不是必然的。

浙公网安备 33010602011771号