我正在尝试解决一个与此类似的问题:扔牌。我的问题的唯一变化是我不需要丢弃卡片的顺序。我只想要最后一张卡。
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int main(void)
{
int n, i;
while ((scanf ("%d", &n) == 1) && n != 0)
{
vector<int> cards;
for (i = 1; i <= n; ++i)
{
cards.push_back(i);
}
while (cards.size() != 1)
{
cards.erase(cards.begin());
cards.push_back(cards.front());
}
printf ("%d\n", cards.at(1));
}
return 0;
}
这是我第一次使用vector
和所有相关的 STL 函数。我检查了它,它说该erase
函数删除了一个向量元素。所以while
循环应该不断减小vector
直到变成1
. 但我没有得到运行这个的输出。我认为这是因为无限循环,所以我尝试vector
在每次迭代中打印大小,发现大小只减小了一次。所以这导致了无限循环。但是我不明白为什么它没有进一步减少。