使用棋盘的 2 个输入坐标,确定它们是否穿过彼此的路径(使用国际象棋游戏的皇后移动)
Using 2 input coordinates of the chess board, identify whether or not they crossed each other's path (using queen moves of the chess game)
class Board
{
public static void main(String args[])
{
int i, j;
int x1 = 0, y1 = 0;
int x2 = 0, y2 = 0;
int[][] board = new int[8][8];
x1 = Integer.parseInt(args[0]);
y1 = Integer.parseInt(args[1]);
x2 = Integer.parseInt(args[2]);
y2 = Integer.parseInt(args[3]);
// initialize the board to 0's
for (i = 0; i < 8; i++)
for (j = 0; j < 8; j++)
board[i][j] = 0;
board[x1][y1] = 1;
board[x2][y2] = 1;
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
{
System.out.print(board[i][j]+" ");
}
System.out.println();
}
}
}
这是我唯一能做到的,就是用 0 和 1 打印电路板
棋盘:
0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
我的目标是编写代码并确定 2 个皇后(即两个 1)是否会相互交叉。
我尝试了很多方法,但有些方法不起作用。
如果你能帮助我,我真的很感激:)
P.S 仍在学习编码:)
欢迎使用 Whosebug :)
这是您要查找的内容:
public static boolean twoQueensSeeEachOther(int x1, int y1, int x2, int y2) {
if (x1 == x2 || y1 == y2) {
return true; // One has picked another
}
if (x1 == x2 || y1 == y2) {
return true; // Row or column
}
if (Math.abs(x1 - x2) == Math.abs(y1 - y2)) {
return true; // Diagonal
}
return false;
}
两个皇后可以互相看到的条件是:
如果他们都在同一个地方,一个选另一个
如果它们共享相同的轴(x 或 y),它们会看到对方,因为它们可以像车一样移动。如果他们的 x
或 y
位置相同,则满足此条件。
如果他们共享同一条对角线,他们就会看到对方,因为他们可以像象一样移动。如果轴之间的差异相等,则满足此条件。示例:
- 黑后在
[2,5]
位,白后在 [4,3]
位。
x
轴之间的差异是 xDiff = abs(2 - 4) = 2
。
y
个轴之间的差异是 yDiff = abs(5 - 3) = 2
。
- 两者的差异是相等的 - 他们在对角线上看到对方。
import java.util.Scanner;
class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int x1 = scanner.nextByte();
int y1 = scanner.nextByte();
int x2 = scanner.nextByte();
int y2 = scanner.nextByte();
boolean sameRow = y1 == y2;
boolean sameColumn = x1 == x2;
boolean canAttack;
if (sameRow || sameColumn) {
canAttack = true;
} else {
canAttack = Math.abs(x1 - x2) == Math.abs(y1 - y2);
}
System.out.println(canAttack ? "YES" : "NO");
}
}
class Board
{
public static void main(String args[])
{
int i, j;
int x1 = 0, y1 = 0;
int x2 = 0, y2 = 0;
int[][] board = new int[8][8];
x1 = Integer.parseInt(args[0]);
y1 = Integer.parseInt(args[1]);
x2 = Integer.parseInt(args[2]);
y2 = Integer.parseInt(args[3]);
// initialize the board to 0's
for (i = 0; i < 8; i++)
for (j = 0; j < 8; j++)
board[i][j] = 0;
board[x1][y1] = 1;
board[x2][y2] = 1;
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
{
System.out.print(board[i][j]+" ");
}
System.out.println();
}
}
}
这是我唯一能做到的,就是用 0 和 1 打印电路板
棋盘:
0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
我的目标是编写代码并确定 2 个皇后(即两个 1)是否会相互交叉。
我尝试了很多方法,但有些方法不起作用。 如果你能帮助我,我真的很感激:)
P.S 仍在学习编码:)
欢迎使用 Whosebug :)
这是您要查找的内容:
public static boolean twoQueensSeeEachOther(int x1, int y1, int x2, int y2) {
if (x1 == x2 || y1 == y2) {
return true; // One has picked another
}
if (x1 == x2 || y1 == y2) {
return true; // Row or column
}
if (Math.abs(x1 - x2) == Math.abs(y1 - y2)) {
return true; // Diagonal
}
return false;
}
两个皇后可以互相看到的条件是:
如果他们都在同一个地方,一个选另一个
如果它们共享相同的轴(x 或 y),它们会看到对方,因为它们可以像车一样移动。如果他们的
x
或y
位置相同,则满足此条件。如果他们共享同一条对角线,他们就会看到对方,因为他们可以像象一样移动。如果轴之间的差异相等,则满足此条件。示例:
- 黑后在
[2,5]
位,白后在[4,3]
位。 x
轴之间的差异是xDiff = abs(2 - 4) = 2
。y
个轴之间的差异是yDiff = abs(5 - 3) = 2
。- 两者的差异是相等的 - 他们在对角线上看到对方。
- 黑后在
import java.util.Scanner;
class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int x1 = scanner.nextByte();
int y1 = scanner.nextByte();
int x2 = scanner.nextByte();
int y2 = scanner.nextByte();
boolean sameRow = y1 == y2;
boolean sameColumn = x1 == x2;
boolean canAttack;
if (sameRow || sameColumn) {
canAttack = true;
} else {
canAttack = Math.abs(x1 - x2) == Math.abs(y1 - y2);
}
System.out.println(canAttack ? "YES" : "NO");
}
}