纠结。。。。
不想写思路了,看这个博客的吧。
http://hi.baidu.com/c4pt0r/blog/item/a3bdd0514f77852642a75b9f.html
贴代码:
#include <iostream> using namespace std; #define K 15 int k; bool solve(int m) { int p = 1, rest = 2 * k; while(true){ p = (p + m - 1) % rest; if(p == 0) p = rest; if(p <= k) return false; rest--; if(rest == k) break; } return true; } int main() { int ans[K], i, j, m; bool flag; memset(ans, 0, sizeof(ans)); while(scanf("%d", &k) && k) { if(ans[k]) { printf("%d\n", ans[k]); continue; } flag = false; for(i = 0; !flag ; i++){ for(j = k + 1; j <= 2 * k && !flag; j++){ m = 2 * k * i + j; if(solve(m)) { flag = true; ans[k] = m; } } } printf("%d\n", ans[k]); } return 0; }