hdu 1443 Joseph 约瑟夫环

#include<stdio.h>
int f[15];
bool jos(int ,int );
int main()
{
 
int i,j,k,m,n;
 
for(i=1;i<14;i++)
  
for(j=i;;j++)
   
if(jos(i,j))
   {
    f[i]
=j;
    
break;
   }
 
while(scanf("%d",&n),n)
  printf(
"%d\n",f[n]);
 
return 0;
}
bool jos(int n,int m)//n代表每一边的人数,m代表所报的数
{
 
int start=0,end=n-1,killed;
 
int i,j;
 
bool flag=true;
 
for(i=2*n;i>n;i--)//从头进行模拟
 {
  killed
=(m-1)%i;//i代表剩余的人数
  if((killed<=end)&&(killed>=start))
  {
   flag
=false;
   
break;
  }
  start
=((start-m)%i+i)%i;//按照那个编号变化公式重新进行赋值
  end=((end-m)%i+i)%i;//加上i,再%i的目的是保证它非零
 }
 
return flag;
}
原文地址:https://www.cnblogs.com/anderson0/p/2040356.html