转圈游戏
Posted seamusopen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了转圈游戏相关的知识,希望对你有一定的参考价值。
题目描述:
编号从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);
以上是关于转圈游戏的主要内容,如果未能解决你的问题,请参考以下文章