这就是问题,我不知道在什么情况下我的代码不起作用,在问题中给出的示例情况下我的代码确实工作得很好。
您将获得一个包含
n
行和 m
列的网格。行和列的编号从 1 到
n
,从 1 到 m
。第 a
行与第 b
列的交集由 (a, b)
表示。
最初,您站在左上角
(1, 1)
。你的目标是到达右下角(n, m)
。
您可以从
(a, b)
向四个方向移动:向上到(a−1, b)
、向下到(a+1, b)
、向左到(a, b−1)
或向右到(a, b+1)
。
连续两次移动不能向同一方向移动,也不能离开网格。最少需要多少步才能到达
(n, m)
?
输入由多个测试用例组成。第一行包含一个整数
t
(1 ≤ t
≤ 10) — 测试用例的数量。测试用例的描述如下。
每个测试用例的第一行包含两个整数
n
和 m
(1 ≤ n, m
≤ 10) — 网格的大小。
对于每个测试用例,打印一个整数:
−1
如果在给定条件下无法达到(n,m)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int times = sc.nextInt();
int resultado = 0;
int n, m;
for (int i = 0; i < times; i++) {
n = sc.nextInt();
m = sc.nextInt();
//Si la matriz es de tamano 1
if (n == 1 && m == 1)
resultado = 0;
else {
//Si alguno es 1 y el otro es mas de 2
if (n == 1 && m > 2 || m == 1 && n > 2) {
resultado = -1;
} else {
//Si alguno es 1 y el otro 2
if (n == 1 && m == 2 || n == 2 && m == 1) {
resultado = 1;
} else {
//Si ambos son impares
if (n % 2 != 0 && m % 2 != 0) {
if (n > m) {
resultado = (n * 2) - 2;
} else {
resultado = (m * 2) - 2;
}
} else {
//Si uno es par y el otro impar
if (n % 2 != 0 && m % 2 == 0 || n % 2 == 0 && m % 2 != 0) {
if (n > m) {
resultado = ((n * 2) - 2) - 1;
} else {
resultado = ((m * 2) - 2) + 1;
}
} else {
//Si ambos son pares o es matriz cuadrada
if ((n % 2) == 0 && (m % 2) == 0 || n == m) {
if (n >= m) {
resultado = (n * 2) - 2;
} else {
resultado = (m * 2) - 2;
}
}
}
}
}
}
}
System.out.println(resultado);
}
}
}
n=2, m=10
。正确答案是19;你的代码提供了 18。