由之前我们约瑟夫最基本的问题的解决模板可以很轻松的解决这个题,知道最后剩下的序号来求最小的m值,总数不大所以逐个验证是否最后剩下的是第13号就行,但是要注意不同的是第一次灭的是第1号,而不是第m号,这个地方特殊处理下就行了。。。
#include <iostream>
#include <cstring>
#define MAX 105
using namespace std;
int n;
int test(int m)
{
int s = 0;
for(int i = 2;i < n;i++){
s = (s+m)%i;
}
return s;
}
int main()
{
while(cin>>n){
if(n == 0)
break;
for(int m = 1;;m++){
int s = 0;
s = test(m);
s = s+1 % n;
if(s == 12){
cout<<m<<endl;
break;
}
}
}
return 0;
}