#1784. 珅泽教育CSP-J第一轮模拟考第八套 第 43 题

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

第2题

有三种操作可以修改一个变量的值:

  • 增加:将变量加一;
  • 减少:将变量减一;
  • 翻倍:将变量翻倍。

函数 solve(x, y) 用于求解最少需要几步操作,才能将变量的值从 xx 变成 yy

std::map<int, int> mem;
int solve(int x, int y)
{
    int base = std::max(x - y, y - x);

    if (____(1)____)
        return ____(2)____;

    if (____(3)____)
        return mem[y];

    int reduce;
    if (____(4)____)
    {
        reduce = ____(5)____;
    }
    else
    {
        reduce = std::____(6)____;
    }

    mem[y] = std::____(7)____;
    return mem[y];
}

(4)(5) 处应填( )。

{{ select(1) }}

  • x % 2 == 0solve(x, y/2) + 1
  • x % 2 == 1solve(x*2, y)
  • y % 2 == 1solve(x*2, y)
  • y % 2 == 0solve(x, y/2) + 1