对于一个由0..n的所有数按升序组成的序列,我们要进行一些筛选,每次我们取当前所有数字中从小到大的第奇数位个的数,并将其丢弃。重复这一过程直到最后剩下一个数。请求出最后剩下的数字。
输入10
输出7
输入500
输出255
方法一:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> list;
int n;
cin>>n;
for(int i=0;i<n;i++)
list.push_back(i);
while(list.size()>1)
{
for(int i=0;i<list.size();i++) #不用管奇数位偶数位,因为vector.erase删除后会自动向前、后补充
{
list.erase(list.begin()+i);
}
}
cout<<list.front()<<endl;
system("pause");
return 0;
}
方法二:
#include <cstdio>