题目大意:
有给定的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;
}