关于题目:
报数游戏的题目无非就是,报到多少就停止报数又从1开始报数,而报到特定的数字就出队,。。最后一般就是问最后的队列情况。。
套路
这种题目肯定是离不开队列这个数据结构的,为了维持一个报数的环境,那么每次的队列头部肯定都得是那个报数的对象,这样才能确保能让特定数字人能够出队,所以每次要是不出队,就需要把队首的元素重新入队到队尾,这样就相当于形成了环形结构。。所以如果报数题目中不是环形结构(或者间接环形)那么请不要使用队列,用最基本的数组就能实现。。。
代码:
m代表出队的数字,而 j 则是用于记录报数的。这一段代码是当队只剩下一个元素时输出,其余的情况可以根据这个结构灵活应变。
queue<int> q;
int n;
cin >> n;
for(int i = 1;i<=n;i++){
q.push(i);
}
for(int j = 1;q.size()!=1;j=(j+1)%m){
if(j){
q.push(q.front());
}
q.pop();
}
cout<<q.front();