3 4 0
5 30
该题算是 约瑟夫 问题的所有扩展了。
code:
// 该题算是 约瑟夫 问题的全部理解了。 #include <cstdio> using namespace std; const int all = 15; int ans[ all ]; int calc( int n, int m, int p ); // oj有用 压力测试, 打个表查找吧 int main(void) { int n, tmp; while( scanf( "%d", &n ) != EOF && n != 0 ){ if( ans[n] ){ printf( "%d\n", ans[n] ); continue; } ans[n] = n+1; for( int i=1; i <= n; ++ i ){ tmp = calc( 2*n, ans[n], i ); if( tmp <= n ){ i = 0; ++ ans[n]; } } printf( "%d\n", ans[n] ); } return 0; } // 该函数计算第 p 个 跳 m 个数的 数, 返回该数 int calc( int n, int m, int p ) { int f = 0 ; for( int i=n-p+1; i <= n; ++ i ) { f = (f+m-1)%i+1; } return f; }
原文:http://www.cnblogs.com/seana/p/5245276.html