POJ_1012 Joseph
問題
解法
カンニングした
配列を作って、コピペする。
配列作成用
#include <cstdio> using namespace std; int a[14]; bool c(int k, int m){ int i = 0, p; for(p = 2 * k; p > k; p--){ i = (i + m - 1) % p; if(i < k) return false; } return true; } int main(){ for(int k = 1; k <= 14; k++){ for(int i = 1; ;i++){ if(c(k, i)){ a[k] = i; break; } } } for(int i = 1; i < 14; i++) printf("%d,\n", a[i]); return 0; }
#include <cstdio> using namespace std; int a[] = { 0, 2, 7, 5, 30, 169, 441, 1872, 7632, 1740, 93313, 459901, 1358657, 2504881, }; int main(){ int n; while(scanf("%d", &n) && n){ printf("%d\n", a[n]); } return 0; }