问题描述:
解题思路:
先使用暴力找到规律再解。
暴力做法:将数据放到一个动态数组中,下标就表示当前编号,符合题意的就放到覆盖该数组中,依次循环,直到只有一个元素停。
规律:小于该数的最大二次幂就是答案。
技巧:当题目要求的输入数据或输出数据很小时,就可以试着找出规律。
题解:
// #include <bits/stdc++.h>
// using namespace std;// vector<int> v;// vector<int> del(vector<int> & v) // 传值,会改变输入的实参
// {
// vector<int> res;
// for(int i = 1; i < v.size(); i = i + 2){ // 下标奇数号的人放入(因为数组下标从0开始,奇数下标对应现偶数编号)
// res.push_back(v[i]);
// }
// return res;
// }// int main()
// {
// int n;cin >> n;
// for(int i = 1; i <= n; i++)v.push_back(i);
// while(v.size() > 1){
// v = del(v);
// }
// cout << v[0];
// return 0;
// }//跟据暴力后找到的规律
#include<bits/stdc++.h>
using namespace std;int main()
{int n;cin >> n;int k = 0;while((1 << k) <= n) // 小于等于n的第一个2次幂就是答案 (不大于n的最大二次幂){k++;}cout << (1 << (k - 1)) << "\n";return 0;
}
知识点:思维,数组删除插入,二进制