
棋盘上的距离
王:王可以横、直、斜走,每步限一格。因此,王的最少步数是水平和垂直距离的较大者。 后:后可以横、直、斜走,每步不限格数。因此,如果起始和目标位置在同一行、列或斜线上,后只需要一步;否则,需要两步。 车:车只能横、竖走,每步不限格数。因此,车的最少步数是水平和垂直距离的较大者。 象:象只能斜走,每步不限格数。因此,如果起始和目标位置不在同一斜线上,象无法到达,步数为无穷大;否则,象的最少步数是水平和垂直距离的较大者。 输入处理:读取输入的测试用例数量 计算距离:计算起始和目标位置的水平距离 计算各棋子的步数: 输出结果:输出每种棋子对应的最少步数。
发布日期:2021-05-07 18:29:16
浏览次数:25
分类:精选文章
本文共 1774 字,大约阅读时间需要 5 分钟。
要解决这个问题,我们需要计算国际象棋棋盘上四种不同棋子(王、后、车、象)从起始位置移动到目标位置所需的最少步数。每种棋子的走法不同,因此需要分别处理它们的移动规则。
分析与解决思路
代码实现
#include#include int main() { int nCases; scanf("%d", &nCases); for (int i = 0; i < nCases; ++i) { char begin[5], end[5]; scanf("%s%s", begin, end); int x = abs(begin[0] - end[0]); int y = abs(begin[1] - end[1]); // 王 int king = (x == 0 && y == 0) ? 0 : (max(x, y) == 0 ? 1 : max(x, y)); // 后 int queen = (x == 0 || y == 0 || x == y) ? 1 : 2; // 车 int rook = (x == 0 || y == 0) ? 1 : (max(x, y) == 0 ? 1 : max(x, y)); // 象 int bishop = 0; if (x == 0 || y == 0) { if (x == y) { bishop = 1; } else { if ((x + y) % 2 == 0) { bishop = (max(x, y) == 0) ? 1 : 2; } else { bishop = -1; // 表示无穷大 } } } else { if ((x - y) % 2 == 0) { bishop = (max(x, y) == 0) ? 1 : 2; } else { bishop = -1; } } // 检查象的步数是否为无穷大 if (bishop == -1) { bishop = 100000; // 示例表示无穷大 } // 输出结果 printf("%d %d %d %d\n", king, queen, rook, bishop); }}
代码解释
nCases
,然后逐个读取每个测试用例的起始和目标位置。x
和垂直距离 y
。- 王:步数为水平和垂直距离的较大者。
- 后:如果起始和目标在同一行、列或斜线上,步数为1;否则步数为2。
- 车:步数为水平和垂直距离的较大者。
- 象:检查是否在同一斜线上,如果是,步数为水平和垂直距离的较大者;否则步数为无穷大。
这个代码通过明确的条件判断和数学计算,准确地模拟了每种棋子的移动规则,从而能够快速计算出最少步数。
发表评论
最新留言
很好
[***.229.124.182]2025年04月11日 00时19分12秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
msfvenom的使用&免杀&外网渗透
2019-03-12
HTTP/2 协议详解
2019-03-12
grafana改用https登录
2019-03-12
使用MySQLTuner-perl对MySQL进行优化
2019-03-12
2018年3月最新的Ubuntu 16.04.4漏洞提权代码
2019-03-12
异或交换两个数的值
2019-03-12
使用python绘出常见函数
2019-03-12
Golang AES加密
2019-03-12
Puppet的一些奇技淫巧
2019-03-12
foreman源NO_PUBKEY 6F8600B9563278F6
2019-03-12
亚马逊aws文档语法错误
2019-03-12
什么是5G?居然有人用漫画把它讲得如此接地气!
2019-03-12
Spring cloud --分布式配置中心组件Spring Cloud Config
2019-03-12
UE4接入Android第三方库2——通过JIN与GameActivity通信
2019-03-12
Unity Job System 2——并行处理数据
2019-03-12
BIG解决保险欺诈问题,开创数字化保险时代
2019-03-12
Apache JMeter5.3 压力测试
2019-03-12
c++ hpp使用好处
2019-03-12
Mac 使用Eclipse老是闪退解决方案
2019-03-12
谈笑间学会-Hbase Rowkey设计
2019-03-12