关于C++的几个问题,希望高手来帮忙解答下
代码如下,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;
}