关于C++的几个问题,希望高手来帮忙解答下

 我来答
大沈他次苹0B
2013-06-24 · TA获得超过7360个赞
知道大有可为答主
回答量:3059
采纳率:100%
帮助的人:182万
展开全部

代码如下,n为求婚者个数,m为间隔长度,eve求婚的例子中m=3

代码运行可通过,下图为示例结果


程序中mark的意思就是下次迭代的起始点。比如初始状态为123456,mark为0,mark+m=3,删除第三个,变为12456,mark=2,mark+m=5,删除第五个,变为1245。以此类推。


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include <iostream>

#include <vector>

using namespace std;


int main()

{

    vector<int> v;

    int n,m;


    cout<<"输入n大小,m步数"<<endl;

    cin>>n>>m;


    for (int i = 1; i <= n; i++)

    {

        v.push_back(i);

    }

    int mark(0);

 for (int i=1;i<=(n-1);i++)

 {

     if ((mark+m)<v.size())

     {v.erase(v.begin()+(mark+m-1));

     mark=mark+m-1;}

    else if((mark+m)==v.size())

    {

        v.erase(v.begin()+(mark+m-1));

     mark=0;

    }

    else if(mark+m>v.size()&&((mark+m)%(v.size()))!=0)

    {

        v.erase(v.begin()+((mark+m)%v.size())-1);

        mark=((mark+m)%(v.size()+1))-1;

    }


    else if (mark+m>v.size()&&((mark+m)%v.size())==0)

    {v.erase(v.begin()+v.size()-1);

      mark=v.size();

 }

 }


cout<<"最后剩余者为"<<endl<<v[0];


   return 0;

}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式