蓝桥杯题集中的第1160道:出圈(约瑟夫问题)
题目描述:
设有n个人围坐一圈并按顺时针方向从1到n编号,从第1个人开始进行1到m的报数,报数到第个m人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所剩下一人为止。
输入格式:
输入多行,每行2个数,分别表示n和m.
输出格式:
计算每一行中最后剩下这个人的编号.
样例输入:
10 3
样例输出:
4
我的解答
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n;
cin>>m;
vector<int> people(n,0);
int out=0,cur=-1;
while(out<(n-1)){
for(int i=0;i<m;i++){
cur=(cur+1)%n;
while(people[cur]){
cur=(cur+1)%n;
}
}
people[cur]=1;
out++;
}
do{
cur=(cur+1)%n;
}while(people[cur]);
cout<<cur+1<<endl;
return 0;
}
提交结果:
究竟是哪里出了问题🤯