虽说是不打表,但还是用了记忆话搜索。。。我感觉就是跟打表无差别了。。。。。大概的思路就是从 n+1 开始搜索直到找到满足条件的值就记下来。。。。。
写程序的时候,最好是把序列变成 0到2*n-1 这样取模的时候不用考虑那么多情况。。。。然后结果+1 就可以了。。。
#include <iostream>
#include<cstdio>
using namespace std;
int main(int argc, char** argv) {
int n, a[15] = {0}, k, m, len;
while (scanf("%d", &n) && n) {
if (!a[n]) {
m = n;
while (1) {
m += 1, k = 0, len = n << 1;
while (1) {
k = (k + m - 1) % len + 1;
if (k > n)
len -= 1, k -= 1;
else
break;
}
if (len == n) {
a[n] = m;
printf("%d\n", m);
break;
}
}
} else
printf("%d\n", a[n]);
}
return 0;
}