笔试编程题之报数游戏

问题描述:

n个人围成一圈,每个人有一个编号,编号从1开始到n。他们从1开始依次报数,每次报到为n的人淘汰,自动退出圈圈,然后下一个人接着从1开始报数,继续游戏,直到圈子只剩下一个人,游戏结束。请问每次淘汰的人编号是多少?最后胜利者又是谁?

示例:

5 2
2 4 1 5 3

第一行两个数,n,m;n为参与游戏人数,m为退出者报的数。
第二行n个数,前n-1个数为每轮游戏依次淘汰者编号,最后一个数为胜利者的标号。

AC代码

#include "bits/stdc++.h"
using namespace std;
int main()
{
    int m,n;
    cin>>n>>m;
    vector<int> li;
    vector<int> v;
    for(int i=1;i<=n;i++)
        li.push_back(i);
    vector<int>::iterator it;
    vector<int>::iterator be=li.begin(); 
        while(li.size())
        {
            for(int j=1;jif(be==li.end())
                be=li.begin();
            }
            vector<int>::iterator re=be;
            if(re==li.end())
            re=li.begin();
            v.push_back(*re);
            li.erase(re);
            be=re++;
            if(be==li.end())
            be=li.begin();  
        }
        cout<<"依次删除";
        for(it=v.begin();it!=v.end()-1;it++)
            cout<<*it<<' ';
        cout<<"胜利者是"<<*it++<return 0;
}

你可能感兴趣的:(笔试编程题)