1、题目链接地址
http://poj.org/problem?id=1012
2k个人,前面k个是好人,后面k个是坏人,找一个数t,每数到第t时就去掉,使所有坏人在好人之前被杀掉。
思路:约瑟夫公式的应用。
2、源代码
#include<iostream> using namespace std; int test(int k, int m) { int i, j; int n = 2 * k; j = 0; for( i = 0; i < k; i++) { j = (j + m - 1) % (n - i); if(j < k )return 0; } return 1; } int main() { int out[14]; int i, j; int t; for(i = 1; i < 14; i++) { j = i + 1; while(1) { if(test(i, j)) { out[i] = j; break; } if(test(i, j + 1)) { out[i] = j + 1; break; } j = i + j + 1; } } while(cin >> t && t) { cout << out[t] << endl; } return 0; }