给所有人编号,前一半好人后一半坏人,从第零个开始数,数的时候用取余的方法确定在哪个位置,为前一半则跳出,因为好人不会出去,所以前一半标号永远不变,判断条件也因此不用改变,每次更新取余的人数
#include <iostream>
using namespace std;
int main()
{
int p[50]={0},k,j[14]={0};
while(cin>>k&&k)
{
if(j[k]!=0){
cout<<j[k]<<endl;
continue;
}
int n=2*k;
int m=1;
for(int i=1;i<=k;i++)
{
p[i]=(p[i-1]+m-1)%(n-i+1);
if(p[i]<k){
i=0;
m++;
}
}
j[k]=m;
cout<<m<<endl;
}
return 0;
}