ヨセフス - - 62-顔の質問オファー安全性を証明する最後の残りの図回る方法を1

/ * 
タイトル:
    ヨセフスの問題。
アイデア:
    使用のリストは、リストの最後には、それが最初に指していることを、時期を決定するために実装注意を払うをリスト
    各サイクルは一つだけの数になるまで、番号を削除します。
* / 
の#include <iostreamの> 
する#include <リスト> 

使用して名前空間STD; 

INT LastRemaining(N-unsigned int型、unsigned int型のM){ 
    IF(N <M 1 || <1。)リターン-1; 
    リスト<整数>番号; 
    のため(INT I = 0、I <N - 、I ++){ 
        numbers.push_back(I); 
    } 
    リスト<整数> :: =イテレータ電流()numbers.begin、
    しばらく(numbers.size()> 1){ 
        (INT用1 = I; I <M、I ++){ 
            現在++; 
            IF(現在numbers.end ==()){ 
                電流= numbers.begin(); 
            }
        }
        リスト<整数> ::イテレータの次= ++現在; 
        IF(次== numbers.end()){ 
            次= numbers.begin()。
        } 
        --current。
        numbers.erase(現在)
        現在=次回。
    } 
    *現在返します。

} 

int型のmain(){ 
    COUT << LastRemaining(5,3)。
}

  

おすすめ

転載: www.cnblogs.com/buaaZhhx/p/12130338.html