csp2021-J初赛完形填空之约瑟夫问题。
#include <iostream>
using namespace std;
const int MAXN=1000000;
int F[MAXN];
int main()
{
int n;
cin >> n;
int i=0,p=0,c=0;
while( c<n-1 (1) ) //如果还没有退出n-1个人时
{
if(F[i]== 0)
{
if( p (2) ) //p的值要么为0,要么为1,如果为1时,则要退出一个人
{
F[i]= 1;
c++;(3) //退出的人数增加
}
p^=1;(4); //p的值进行变化
}
i=(i+1)%n (5); //i代表报数的人,因为是围成一个圈,所以要%N
}
int ans =-1;
for(i=0;i<n; i++)
if(F[i]== 0)
ans = i;
cout<<ans<<endl;
return 0;




浙公网安备 33010602011771号