//668K 63MS
#include <iostream>
//因为round[i]的公式为A%B,故其取值范围为[0 , B-1],则令这B个人也从零开始编号
//M必须大于K,且因为最后两个坏人的关系,有M%(K+1) == 0/1
//last_kill-1代表从last_kill-1的下一个开始数
using namespace std;
int K;
int ans[15];//1-13
void Joseph(int k){
int m = k+1;
while(true){
int last_kill = 0;
int i;
for(i=1;i<=k;i++){
last_kill = (last_kill - 1 + m) % ((k<<1) - i + 1);
if(last_kill < k)
break;
}
if(i > k){
ans[k] = m;
break;
}
//注意,可别把这个放前边去了
if(m % (k+1))
m+=k;
else
m++;
}
return ;
}
int main(){
for(int i=1;i<=13;i++)
Joseph(i);
while(cin>>K && K)
cout<<ans[K]<<endl;
return 0;
}
07-03
07-03
07-03
09-12
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交