轉圈遊戲
阿新 • • 發佈:2018-08-06
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);
轉圈遊戲