约瑟夫环变形题
因为第一次关第一个,所以可以转化为N-1个电厂,最后留下第12个电厂的问题
代码如下:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int x,y,i,j;
while(cin>>x&&x)
for(i=1;; ++i)
{
y=0;
//新环是由 (旧环中编号-最大报数值)%旧总人数 得到的
//所以逆推时可以由 (新环中的数字 +最大报数值)%旧总人数 取得
//即旧环中编号=(新环中编号+最大报数值)%旧总人数
for(j=2; j<x; j++)
y=(y+i)%j;
if(!(y-11))//因为第一个记为0,所以第12个记为11
{
cout<<i<<endl;
break;
}
}
return 0;
}