一、看到猫吃老鼠问题,感觉如果用STL将更加简单。在实现时将问题稍作修改,变成总共n个老鼠,每隔m个吃一个,求最后剩下哪一个,并用STL实现。
二、代码
#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;
}
责任编辑:小草