Description
有k个坏人k个好人坐成一圈,前k个为好人(编号1~k),后k个为坏人(编号k+1~2k)。现在有一个报数m,从编号为1的人开始报数,报到m的人就要自动死去(下一个开始报数的为当前死去的下一个开始)。问当m为什么值时,可以使得在出现好人死亡之前,k个坏人先全部死掉?
Sample Input
3
4
0
Sample Output
5
30
题解:
整理ing
AC_Code(cpp-暴力打表):
#include<iostream>
using namespace std;
int Who_else[30];
int lol[14] ={0,2,7,5,30,169,441,1872,7632,1740,93313,459901,1358657,2504881};
int main(void)
{
int k;
while (cin >> k,k)
{
cout << lol[k] << endl;
}
return 0;
}
AC_Code(cpp):
#include<iostream>
using namespace std;
int Who_else[30];
int lol[14];
void init()
{
for (int k = 1; k < 14; k++)
{
memset(Who_else, 0, sizeof(Who_else));
int n = 2 * k;
int m = k + 1;
for (int i = 1; i <= k; i++)
{
Who_else[i] = (Who_else[i - 1] + m - 1) % (n - i + 1);
if (Who_else[i] < k)
{
i = 0;
m++;
}
}
lol[k] = m;
}
}
int main(void)
{
int k;
init();
while (cin >> k,k)
{
cout << lol[k] << endl;
}
return 0;
}