我有以下问题
在国际象棋中,主教可以斜着走任意多个方格。给定棋盘上的两个不同的方格,请确定主教是否可以在一步内从第一个方格到达第二个方格。
程序输入四个数字(1到8之间),指定起始方格和结束方格的列号和行号。如果主教可以在一步内从第一方格到第二方格,则程序应输出YES;否则,输出NO。
例如:
输入: 2 3 5 6
输出:
YES
假设单元格从左到右、从下到上编号,即左下角单元格具有列号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) 在同一对角线上。 - Stef