输入士兵的个数以及需要报的号分别为n,k; 从一依次报数,若是报到k的士兵,则退出队伍,若是没有,则继续依次循环下去,直到队伍剩下最后一个人,要求是输出最后一个人的编号,无其他多于输入。
这里运用队列的方法来解决问题,将士兵的编号依次进队,在队列中人数不为一的情况下,判断是否与k值相同,若相同,则出队,再继续进行操作。
#include<iostream>
#include<bits/stdc++.h>
#include<queue>
using namespace std;
int main()
{
queue<int> Q;//定义时已经初始化
int n,k;
int t;
cin>>n>>k;
int i;
for(i=1;i<=n;i++)
Q.push(i);//进队列
while(1)
{
if(Q.size()==1)//得到队列里元素的个数
break;
for(i=1;i<=k;i++)
{
if(i==k)
{
Q.pop();//出队列
i=1;
if(Q.size()==1)
break;
}
t=Q.front();//得到队首的值
Q.pop();//出队列
Q.push(t);//进队列
}
}
cout<<Q.front();
return 0;
}