[语言月赛202302] 风神瞳 题解
Source & Knowledge
2023 年 2 月语言月赛,由洛谷网校入门计划/基础计划提供。
文字题解
题目大意
给定一个棋盘,规定
解析
本题考察对于分支结构的复杂运用。
首先补充一个问题,对于变量名 y0, y1, yn,在 math.h 头文件中有定义三个同名的函数,用于求第二类贝塞尔函数解,相关资料可以在 https://www.ibm.com/docs/en/zos/2.3.0?topic=functions-y0-y1-yn-bessel-second-kind 中查阅。因此在题目中使用这些变量名有可能会造成冲突,进而导致编译错误。
因此以下解析我们使用
我们首先需要对棋子种类 if 语句完成。
本题用到的结构为:
if (某某条件) {
// 达到这个条件时需要做的事情
} else {
// 否则需要做的事情
}
具体的控制流可以参考 https://www.runoob.com/cplusplus/cpp-decision.html,由于篇幅限制这里不再做过多的描述。
棋子种类
if (p == 1) { /*...*/ }
else if (p == 2) { /*...*/ }
else if (p == 3) { /*...*/ }
else { /*...*/ }
对于棋子种类,我们进行如下分类讨论:
-
车
由于一次操作下车可以沿行或者列移动,因此此时只需要判断第一枚棋子和第二枚棋子的行坐标和列坐标是否有任意一个相同。
具体的,我们只需要判断
a == c || b == d是否成立即可。其中||称为逻辑或运算符,代表符号两边的条件只要有一个成立则整个成立。如果上述式子成立则输出Yes,否则输出No。 -
炮
由题面,炮如果想要吃子,那么直线上的炮与对方棋子的中间必须有一个另外的棋子。然而棋盘上只有两枚棋子,因此炮无论如何都吃不掉对方的棋子。此时直接输出
No即可。 -
马
马走日,这里提供一种比较简单的判断方式。
我们使用两个变量
e, f 分别记录|a - c| ,|b - d| 。当且仅当e 与f 中有一个等于1 另一个等于2 ,马才可以吃掉对方棋子,输出Yes,否则马不可以吃子,输出No。 -
象
象走田,这里提供一种与马类似的判断方式。
我们使用两个变量
e, f 分别记录|a - c| ,|b - d| 。当且仅当e 与f 均等于2 ,象才可以吃掉对方棋子,输出Yes,否则象不可以吃子,输出No。
视频题解
完整代码请在视频中查看。