转圈游戏(list)
题目描述:
编号从1到N的小朋友们围成了一圈。现在从1号开始报数,每个报出3的小朋友退出圈子,下一位从1开始重新报数。那么,最后剩下的那一位会是谁呢?
输入格式:
输入N的值。
输出格式:
输出留在圈里的最后一位小朋友的编号。
样例1输入:
3
样例1输出:
2
样例2输入:
100
样例2输出:
91
#include <iostream> #include<list> using namespace std; int main() { list<int> ls; //使用stl的list int m=3; //3个是一轮 int n=0; cin>>n; if(m<1||n<1) //如果m,n不合法 则返回-1 { return -1; } for(int i=1;i<=n;++i) //王队列后面加元素 { ls.push_back(i); } list<int>::iterator ite=ls.begin(); //定义一个迭代器指针 int numberoff=1; while(ls.size()!=1) { if(numberoff++ == m) { ite=ls.erase(ite); numberoff=1; } else ite++; if(ite==ls.end()) ite=ls.begin(); } cout<<*ite; }