纠结。。。。
不想写思路了,看这个博客的吧。
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;
}