题解 | 约瑟夫环
约瑟夫环
https://www.nowcoder.com/practice/e417cfe32c74416ca38247f619ddb322
#include <iostream>
#include <vector>
using namespace std;
bool isok(const vector<int>& a){
int count=0;
for(int as:a){
if(as==1){
count++;
}
}
return count==1;
}
int main() {
int n,k,m;
cin>>n>>k>>m;
vector<int> a(n,1);
int s,rem=m;
while(!isok(a)){
m=rem;
for(int i=0;i<m;i++){
if(a[(k+i)%n]==0){
m++;
}}
s=(k+m-1)%n;
a[s]=0;
k=(s+1)%n;
}
for(int i=0;i<n;i++){
if(a[i]==1){
cout<<i<<endl;
}
}
}
// 64 位输出请用 printf("%lld")

联想公司福利 1548人发布