#12447. 珅泽教育CSP-J第一轮模拟考第二十八套 第 37 题
珅泽教育CSP-J第一轮模拟考第二十八套 第 37 题
三、完善程序(单项选择题,每题 3 分,共 30 分)
完善程序(1):重排为 2 的幂
对于输入的正整数重新排列,判断是否存在一个没有前导零的重排结果是 2 的幂。
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
bool flag;
vector<int> vis;
string nums;
bool checkPower(int n) {
return (n & (n - 1)) == ___(1)___;
}
void dfs(int x, int ans) {
if (___(2)___) {
flag = checkPower(ans);
return;
}
for (int i = 0; i < nums.length(); i++) {
if ((ans == 0 && nums[i] == '0') || vis[i] || (i > 0 && !vis[i - 1] && ___(3)___)) {
continue;
}
vis[i] = 1;
dfs(x + 1, ___(4)___);
if (flag) return;
vis[i] = 0;
}
}
int main() {
cin >> nums;
___(5)___;
vis.resize(nums.length());
dfs(0, 0);
cout << (flag ? "yes" : "no");
return 0;
}
④处应填( )。
{{ select(1) }}
ans*10+nums[i]ans*10+nums[i]-'0'(nums[i]-'0')*10+ansans*10+nums[i-1]-'0'