转圈游戏(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;
}

 

posted @ 2021-01-06 21:47  一只蒟蒻也有大佬梦  阅读(157)  评论(1编辑  收藏  举报