UVA 151 - Power Crisis

 

 

約瑟夫環變形題

因爲第一次關第一個,所以可以轉化爲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;
}

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章