有n 个小朋友做游戏,他们的编号分别是1,2,3...n。他们按照编号从小到大依次顺时针围成一个圆圈,从第一个小朋友开始从1 报数,依次按照顺时针方向报数(加一),报m 的人会离开队伍,然后下一个小朋友会继续从1 开始报数,直到只剩一个小朋友为止。
输入 n m
输出 赢得小朋友的编号
解题说明:这个题>>>回想老夫第一次参加ccf第二题,就是这差不多的题,用普通数组做的,挂了!还是年少太无知啊,起步太晚了!
用队列模拟即可,啥约瑟夫问题也是同一个套路。
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
queue<int>q;
int main(){
int n,m;cin>>n>>m;
for(int i=1;i<=n;i++)q.push(i);
int acout=1;
while(q.size()!=1){
int temp=q.front();q.pop();
if(acout==m)acout=1;
else {
q.push(temp);
acout++;
}
}
cout<<q.front()<<endl;
return 0;
}
另一类似题:continue是结束循环中当前执行的一趟,别瞎写了。