UVA 305 - Joseph
题意:前k个好人,后k个坏人,排成一个环,现在给一个步数m,按照约瑟夫环问题去走,保证杀光坏人,不杀到好人,求最小的m
思路:k最多14,直接枚举步数模拟即可
代码:
#include <cstdio>
#include <cstring>
int k, ans[15];
bool judge(int num, int k) {
int now = 0;
for (int i = num * 2; i > num; i--) {
now = (now - 1 + k) % i;
if (now < num) return false;
}
return true;
}
int solve(int k) {
for (int i = k + 1; ;i++) {
if (judge(k, i))
return i;
}
return -1;
}
int main() {
for (int i = 1; i < 14; i++)
ans[i] = solve(i);
while (~scanf("%d", &k) && k) {
printf("%d\n", ans[k]);
}
return 0;
}