1. 程式人生 > >轉圈遊戲

轉圈遊戲

list 失效 begin class ostream ras 方式 out push

題目描述:
編號從1到N的小朋友們圍成了一圈。現在從1號開始報數,每個報出3的小朋友退出圈子,下一位從1開始重新報數。那麽,最後剩下的那一位會是誰呢?


輸入格式:
輸入N的值。


輸出格式:
輸出留在圈裏的最後一位小朋友的編號。


樣例1輸入:
3


樣例1輸出:
2


樣例2輸入:
100


樣例2輸出:
91

#include <iostream>
#include <list>
using namespace std;
list<int> child;
void circle(list<int>::iterator &ite)
{
    if (ite == child.end())
    {
        ite 
= child.begin(); } } int main() { int N; cin >> N; for (int i = 1; i <= N; i++) { child.push_back(i); } list<int>::iterator ite=child.begin(); //1 while (1) { if (child.size() == 1) break; circle(++ite);//2 circle(++ite);//
3 child.erase(ite++);//1 circle(ite); } cout << *(child.begin())<<endl; return 0; }

erase(ite)刪除叠代器指向的節點 因為不是順序存儲的刪掉當前節點後,無法遍歷到往後的節點 就會造成叠代器失效,可以用以下兩總方式來避免

1. child.erase(ite++);
2. ite=child.erase(ite);

轉圈遊戲