对于一个由0..n的所有数按升序组成的序列,我们要进行一些筛选,每次我们取当前所有数字中从小到大的第奇数位个的数,并将其丢弃。重复这一过程直到最后剩下一个数。请求出最后剩下的数字。
#include <iostream> #include <vector> using namespace std; int main() { int n; cin >> n; vector<int> v(n+1); for (int i = 0; i <= n;i++) { v[i] = i; } int j = 0; while (v.size()>1) { int j = 0; cout << "-----start---------" << endl; while (j<v.size()) { v.erase(v.begin()+j);//每删除一个元素,后面的所有元素要向前移动一位 j++; } cout << "--------end----------" << endl; } cout << v[0] << endl; return 0; }