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;

  

 

image

 

image

 

image

 

posted @ 2025-09-01 19:46  我微笑不代表我快乐  阅读(8)  评论(0)    收藏  举报