题目

<math> <semantics> <mrow> <mi> n </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> n </annotation> </semantics> </math>n 个小朋友做游戏,他们的编号分别是 <math> <semantics> <mrow> <mn> 1 </mn> <mo separator="true"> , </mo> <mn> 2 </mn> <mo separator="true"> , </mo> <mn> 3... </mn> <mi> n </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> 1,2,3...n </annotation> </semantics> </math>1,2,3...n
他们按照编号从小到大依次顺时针围成一个圆圈,从第一个小朋友开始从 <math> <semantics> <mrow> <mn> 1 </mn> </mrow> <annotation encoding="application&#47;x&#45;tex"> 1 </annotation> </semantics> </math>1 报数,依次按照顺时针方向报数(加一),报 <math> <semantics> <mrow> <mi> m </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> m </annotation> </semantics> </math>m 的人会离开队伍,然后下一个小朋友会继续从 <math> <semantics> <mrow> <mn> 1 </mn> </mrow> <annotation encoding="application&#47;x&#45;tex"> 1 </annotation> </semantics> </math>1 开始报数,直到只剩一个小朋友为止。

输入格式

第一行输入两个整数, <math> <semantics> <mrow> <mi> n </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> n </annotation> </semantics> </math>n <math> <semantics> <mrow> <mi> m </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> m </annotation> </semantics> </math>m。( <math> <semantics> <mrow> <mn> 1 </mn> <mo> ≤ </mo> <mi> n </mi> <mo separator="true"> , </mo> <mi> m </mi> <mo> ≤ </mo> <mn> 1000 </mn> </mrow> <annotation encoding="application&#47;x&#45;tex"> 1 \leq n,m \leq 1000 </annotation> </semantics> </math>1n,m1000

输出格式

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

样例输入

10 5

样例输出

3

题解

队列基本考察

#include<iostream>
#include<queue>
using namespace std;
int main(){
	queue<int> q;
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		q.push(i);
	while(q.size() != 1){
		int t;
		for(int i=0;i<m-1;i++){  // 数 m-1 次 
			t = q.front();
			q.pop();
			q.push(t);
		} 
		q.pop();  // 第 m 个人出队 
	}
	cout<<q.front();
	return 0;
}

返回目录,查看更多