华为机试——约瑟夫环变种

来源:互联网 发布:淘宝叶罗丽娃娃24元 编辑:程序博客网 时间:2024/06/06 18:37

华为机试——约瑟夫环变种

输入一个由随机数组组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。从数组首位置开始计算,计算到m后,将该数列该位置数值替换计数值m,并将数列该位置数值出列,然后从下位置从新开始技术,知道数列所有数值出列位置。如果计数到达数列尾段,则返回数列首位置继续计数。请编写程序实现上述技术过程,同时输出数值出列的顺序。

示例:

输入:int input_array[]={3,1,2,4},int len=4,m=7;

输出:output_array[]={2,3,1,4}

#include<iostream>#include<list>#include<algorithm>using namespace std;void Joes(int n,list<int> &number,int m){    if(n < 1||m <1 )        return ;    list<int>::iterator current=number.begin();    while(number.size()>0)    {        while(--m)        {            current++;            if(current == number.end())                current=number.begin();        }        m=*current;        cout<<*current<<" ";        list<int>::iterator next=++current;        if(next == number.end())            next=number.begin();        --current;        number.erase(current);        current=next;    }}int main(){    int len,m;    list<int> number;    cin>>len;    int num;    for(int i=0;i<len;i++)    {        cin>>num;        number.push_back(num);    }    cin>>m;    Joes(len,number,m);    return 0;}
0 0