有人能找到此代码不起作用的情况吗?

问题描述 投票:0回答:1

这就是问题,我不知道在什么情况下我的代码不起作用,在问题中给出的示例情况下我的代码确实工作得很好。

问题描述

您将获得一个包含

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);
        }
    }
}
java
1个回答
0
投票

n=2, m=10
。正确答案是19;你的代码提供了 18。

© www.soinside.com 2019 - 2024. All rights reserved.