题目
有 <math> <semantics> <mrow> <mi> n </mi> </mrow> <annotation encoding="application/x-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/x-tex"> 1,2,3...n </annotation> </semantics> </math>1,2,3...n。
他们按照编号从小到大依次顺时针围成一个圆圈,从第一个小朋友开始从 <math> <semantics> <mrow> <mn> 1 </mn> </mrow> <annotation encoding="application/x-tex"> 1 </annotation> </semantics> </math>1 报数,依次按照顺时针方向报数(加一),报 <math> <semantics> <mrow> <mi> m </mi> </mrow> <annotation encoding="application/x-tex"> m </annotation> </semantics> </math>m 的人会离开队伍,然后下一个小朋友会继续从 <math> <semantics> <mrow> <mn> 1 </mn> </mrow> <annotation encoding="application/x-tex"> 1 </annotation> </semantics> </math>1 开始报数,直到只剩一个小朋友为止。
输入格式
第一行输入两个整数, <math> <semantics> <mrow> <mi> n </mi> </mrow> <annotation encoding="application/x-tex"> n </annotation> </semantics> </math>n, <math> <semantics> <mrow> <mi> m </mi> </mrow> <annotation encoding="application/x-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/x-tex"> 1 \leq n,m \leq 1000 </annotation> </semantics> </math>1≤n,m≤1000)
输出格式
输出最后一个小朋友的编号,占一行。
样例输入
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;
}