[语言月赛202303] Factorial B 题解

· · 题解

[语言月赛202303] Factorial B 题解

Source & Knowledge

2023 年 3 月语言月赛,由洛谷网校入门计划/基础计划提供。

本题考察循环结构。

文字题解

题目大意

小 F 和小 B 玩游戏。小 F 有一个数字 x,小 B 有一个数字 y

从小 F 开始,双方轮流操作。在某次操作中,如果自己手上的数比对方的数小,就把自己的数加一,否则把自己的数改为除以二并向下取整。

当一方的数字为 0 时,游戏结束。求结束时双方手里的数字。

解析

依照题意模拟即可。这是一个轮数不固定的循环,可以采用 while 循环来处理,其语句是 while (A) B,表示当语句 A 成立时不停执行语句(块)B

在本题中,循环继续的条件是 xy 均不为 0,应把两数不为零的语句用逻辑与(&&)链接。可以用一次 while 循环来模拟一轮(双方各操作一次)游戏。

while (x != 0 && y != 0) {
  if (x < y) ++x;
  else x >>= 1;   // 这句话等价于 x /= 2
  if (x == 0) break;  // 注意小 F 操作完后如果数字已为 0 则需要即时停止。
  if (x > y) ++y; 
  else y >>= 1;  // 这句话等价于 y /= 2
}

最后输出 xy 即可。

视频题解

完整代码请在视频中观看