#12446. 珅泽教育CSP-J第一轮模拟考第二十八套 第 36 题

珅泽教育CSP-J第一轮模拟考第二十八套 第 36 题

三、完善程序(单项选择题,每题 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) }}

  • nums[i] == nums[i+1]
  • nums[i] == nums[i-1]
  • nums[i-1] == nums[i+1]
  • nums[i] == nums[x-1]