【发布时间】:2021-10-11 09:15:26
【问题描述】:
我有以下问题
在国际象棋中,主教沿对角线移动任意数量的方格。给定棋盘上的两个不同方格,判断一个象能否一次从第一个方格走到第二个方格。
程序接收从 1 到 8 的四个数字作为输入,指定起始方格的列号和行号以及结束方格的列号和行号。如果主教可以一次从第一个方格移动到第二个方格,程序应该输出 YES,否则输出 NO。
例如:
输入: 2 3 5 6
输出:
是的
假设单元格从左到右,从下到上编号,即左下单元格的列号为1,行号为1,而右下角的单元格的列号为8,行号为1。
我走了多远?
我设法检查了主教是否沿对角线移动,但它可以移动任何对角线,所以它是不正确的。有人可以给我一些提示吗?
我的代码
initial_coord_x=int (input('enter the initial x'))
initial_coord_y=int (input('enter the initial y'))
final_coord_x=int (input('enter the final x'))
final_coord_y=int (input('enter the final y'))
if final_coord_x<=8 and final_coord_y<=8:
if final_coord_x < initial_coord_x and final_coord_y > initial_coord_y:
print ('you moved legally')
elif final_coord_x < initial_coord_x and final_coord_y < initial_coord_y:
print ('you moved legally')
elif final_coord_x > initial_coord_x and final_coord_y > initial_coord_y:
print ('you moved legally')
elif final_coord_x > initial_coord_x and final_coord_y < initial_coord_y:
print ('you moved legally')
else:
print ('no!')
else:
print ('illegal move, you moved outside the chessboard')
【问题讨论】:
-
“它可以移动任何对角线”是什么意思?
-
注意只有两个可能的对角线方向,它们有数学方程
y = x + k和y = -x + k; k 的每个值都会导致一条不同的平行对角线。位于同一对角线上的两个正方形 (x1,y1) 和 (x2,y2) 将满足k相同值的方程。由于 k 的值可以通过将两个可能的方程分别改写为k = y-x和k = y+x得到,所以最终的结论是:(x1, y1) 和 (x2, y2) 在同一对角线上当且仅当 x1 +y1 = x2+y2 或 x1-y1 = x2-y2。