报数 - 计蒜客

n n 个小朋友做游戏,他们的编号分别是 1 , 2 , 3... n 1,2,3...n

他们按照编号从小到大依次顺时针围成一个圆圈,从第一个小朋友开始从 1 1 报数,依次按照顺时针方向报数(加一),报 m m 的人会离开队伍,然后下一个小朋友会继续从 1 1 开始报数,直到只剩一个小朋友为止。

输入格式

第一行输入俩个整数, n n m m 。( 1 n , m 1000 1 \leq n,m \leq 1000

输出格式

输出最后一个小朋友的编号,占一行。

样例输入

10 5

样例输出

3

解:
用一个队列即可完成,将报的数与 m m 取余,为0时只pop,其余的数操作pop前push(队头元素)。
代码:

扫描二维码关注公众号,回复: 5385284 查看本文章
#include"iostream"
#include"queue"
#include"algorithm"
using namespace std;

int main()
{
	int n,m;
	cin>>n>>m;
	queue<int> a;
	int flag=0;//记录报数
	for(int i=0;i<n;i++){
		flag++;
		if((i+1)%m==0)
			continue;
		a.push(i+1);
	}
	while(a.size()!=1){
		flag++;
		if(flag%m==0)//只踢不入
			a.pop();
		else {
			a.push(a.front());
			a.pop();
		}
	}
	cout<<a.front()<<endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43508196/article/details/86607463