报数
题目:有 n 个小朋友做游戏,他们的编号分别是1,2,3…n。他们按照编号从小到大依次顺时针围成一个圆圈,从第一个小朋友开始从1 报数,依次按照顺时针方向报数(加一),报 m 的人会离开队伍,然后下一个小朋友会继续从 1 开始报数,直到只剩一个小朋友为止。
输入格式
第一行输入俩个整数,n,m。(1≤n,m≤1000)
输出格式
输出最后一个小朋友的编号,占一行。
样例输入
10 3
样例输出
3
#include<cstdio> #include<queue> #include<iostream> using namespace std; queue<int>q; void fun(int n,int m) { int cnt=0; while(q.size()>1){ cnt++; if(cnt==m){//如果报数报到了m,就直接弹出队列 q.pop(); cnt=0; } else{//否则,取出队列最前端元素放在末尾 int temp=q.front(); q.pop(); q.push(temp); } } cout<<q.front(); } int main() { int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ q.push(i); } fun(n,m); return 0; }
原文:https://www.cnblogs.com/LJHAHA/p/10778148.html