我的解
#include<iostream>
#include<list>
#include<algorithm>
using namespace std;
void erase(list<int> <, int cc,int begin)
{
int i = begin;
list<int>::iterator iter = lt.begin();
for (; iter != lt.end();)
{
if (i%cc == 0 || i % 10 == cc)
{
lt.erase(iter++);
i++;
}
else
{
iter++;
i++;
}
}
if (lt.size() > 1)
erase(lt, cc, i);
}
int main()
{
int c, y;
list<int> ls;
cin >> c >> y;
for (int i = 1; i <= c; i++)
{
ls.push_back(i);
}
erase(ls,y,1);
cout << *ls.begin();
return 0;
}
感触:选好适合的容器是关键,这里是一个不断循环的过程,用queue再合适不过,而我考虑到随机删除的问题,选用了list容器,所以用到了递归,记得更新起始变量i,最终结果是90分,不知道错在哪里。
另一种思路,用两个vector,一个做tag,直到剩下一个为true,不过要不断的判断,速度应该快不了。