资讯动态

2026-10-19:偶数次骑士移动。用go语言,给定两个整数数组 start 和 target,分别表示 8×8 标准国际象棋棋盘上的起点格和终点格,坐标形式都是 [x, y]。要求判断:骑士能否从

发布时间:2026/10/21 12:28:24 来源:尧图企业网站定制
2026-10-19偶数次骑士移动。用go语言给定两个整数数组 start 和 target分别表示 8×8 标准国际象棋棋盘上的起点格和终点格坐标形式都是 [x, y]。要求判断骑士能否从 start 出发经过偶数步合法移动后到达 target。若可以返回 true若不可以返回 false。骑士的合法移动方式是先沿一个方向走两格再沿与刚才方向垂直的方向走一格。start.length target.length 2。0 start[i], target[i] 7。输入 start [1,1], target [2,2]。输出 true。解释一种可行的移动序列为 (1, 1) - (3, 2) - (2, 4) - (4, 3) - (2, 2)。骑士经过 4 次移动到达目标位置4 是偶数。因此答案为 true。题目来自力扣3996。大体步骤如下程序首先准备两个长度为 2 的整数数组分别表示起点start和终点target每个数组的两个元素就是棋盘上的横、纵坐标。进入判断函数后先取起点的两个坐标相加即计算start[0] start[1]再对 2 取余数。这个余数可以理解为起点格子的一种“颜色”或“奇偶属性”余数为 0 表示坐标和是偶数余数为 1 表示坐标和是奇数。然后对终点做同样的处理计算target[0] target[1]再对 2 取余数得到终点格子的“颜色”或“奇偶属性”。接着比较起点和终点得到的两个余数是否相等。如果相等说明起点和终点位于同一种颜色的格子上如果不相等说明它们位于不同颜色的格子上。根据骑士移动规则骑士每走一步坐标和的变化量一定是奇数因此每走一步都会让所在格子的颜色发生翻转。也就是说走奇数步后颜色会改变走偶数步后颜色保持不变。因此如果起点和终点颜色相同就可以通过偶数次骑士移动到达如果颜色不同就不可能通过偶数次移动到达。代码正是利用这个性质直接比较起点和终点的坐标和奇偶性。在示例中起点是[1, 1]坐标和为1 1 2对 2 取余得到 0终点是[2, 2]坐标和为2 2 4对 2 取余也得到 0。两者余数相等所以判断结果为真。主程序接收这个判断结果并将其打印出来因此示例最终输出true。总的时间复杂度O(1)。因为只进行了常数次数组访问、加法、取模和比较没有循环或递归输入规模固定为两个长度为 2 的数组。总的额外空间复杂度O(1)。除了保存起点、终点和结果等常数个变量外没有使用额外的数据结构输入数组本身通常不计入额外空间。Go完整代码如下packagemainimport(fmt)funccanReach(start,target[]int)bool{return(start[0]start[1])%2(target[0]target[1])%2}funcmain(){start:[]int{1,1}target:[]int{2,2}result:canReach(start,target)fmt.Println(result)}Python完整代码如下# -*-coding:utf-8-*-defcan_reach(start,target):return(start[0]start[1])%2(target[0]target[1])%2defmain():start[1,1]target[2,2]resultcan_reach(start,target)print(result)if__name____main__:main()C完整代码如下#includeiostream#includevectorboolcanReach(conststd::vectorintstart,conststd::vectorinttarget){return(start[0]start[1])%2(target[0]target[1])%2;}intmain(){std::vectorintstart{1,1};std::vectorinttarget{2,2};boolresultcanReach(start,target);std::coutstd::boolalpharesultstd::endl;return0;}

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑