当前位置: 代码迷 >> 综合 >> 约瑟夫环 数学解
  详细解决方案

约瑟夫环 数学解

热度:81   发布时间:2024-01-20 20:21:03.0

题目大意:

有给定的N个人,主角编号13,求最小的报数序号M,使得主角为赢家。

报数序列为1,M%N这样.. 1是第一个出去的

网上看的数学方法,各种感觉不爽!

觉得算法中最神奇的就是2分和递归了。美妙!

数学分析过程网上都有,不解释了。

#include<iostream>
using namespace std;int find( int n,int m )
{int s=0;for( int i=2;i<=n;i++ )s=(s+m)%i;return s+1;
}int main()
{int n;int ans[111];memset( ans,0,sizeof(ans) );for( int i=1;i<100;i++ )for( int j=1;;j++ ){if( find(i-1,j)==12 ){ans[i]=j;break;}}while( scanf("%d",&n)!=EOF&&n ){printf( "%d\n",ans[n] );}return 0;
}


  相关解决方案