#include < vector >
#include < iostream >
using namespace std;
int eat(const int total, const int space)
{
if (total <= 0 || space <= 0)
{
return -1;
}
vector v;
vector::iterator it;
// 初使化向量
for (int i = 1; i <= total; ++i)
{
v.push_back(i);
}
int j = 1;
it = v.begin();
while (v.size() > 1)
{
// 如果数到第m个,则删除它,并且从头开始数
// 迭代器不需要后移,因为删除之后自动就指向下一个元素
if (space == j)
{
v.erase(it);
j = 1;
}
else
{
++it;
++j;
}
// 如果到最后了,让迭代器指向第一个元素
if (it >= v.end())
{
it = v.begin();
}
}
// 现在只有一个元素了,那么第一个元素就是我们需要的
return (*v.begin());
}
void main( void )
{
int total;
int space;
total = 5;
space = 1;
cout << "总共: " << total << " "
<< "间隔: " << space << " "
<< "最后: " << eat(total, space) << endl;
total = 5;
space = 2;
cout << "总共: " << total << " "
<< "间隔: " << space << " "
<< "最后: " << eat(total, space) << endl;
total = 5;
space = 3;
cout << "总共: " << total << " "
<< "间隔: " << space << " "
<< "最后: " << eat(total, space) << endl;
}
猫吃老鼠的STL实现
最新推荐文章于 2022-06-04 12:06:15 发布