约瑟夫环问题
有 $n$ 个人围成一圈,从第 $1$ 个人开始报数,报到 $k$ 的人出列,问最后出列的人是几号。
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
ll n;
cin >> n;
const int k = 3;
ll res = 0;
for (ll i=2;i<=n;i++){
res = (res + k) % i;
}
//转换成1-based
cout << res+1 << '\n';
return 0;
}

浙公网安备 33010602011771号