-1

Помогите с решением задачи. Проблема в том, что программа выводит ответ после ввода первой группы чисел. Несмотря на то, что ввожу количество тестов 2. То есть я ввожу 2 (количество тестов) далее необходимо ввести две группы чисел (зависит от количества тестов) 2 4 6 и 3 9, но после ввода первой группы чисел 2 4 6 и нажатия Enter программа выводит ответ 2 12.

введите сюда описание изображения

import java.util.Scanner;

public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); if (n == 0) { System.out.println("NO SOLUTION"); } else { for (int i = 0; i < n; i++) { int k = sc.nextInt(); int[] nums = new int[k]; for (int j = 0; j < k; j++) { nums[j] = sc.nextInt(); } int gcd = nums[0]; int lcm = nums[0]; for (int j = 1; j < k; j++) { gcd = gcd(gcd, nums[j]); lcm = lcm(lcm, nums[j]); } System.out.println(gcd + " " + lcm); } } }

private static int gcd(int a, int b) {
    if (b == 0) {
        return a;
    } else {
        return gcd(b, a % b);
    }
}

private static int lcm(int a, int b) {
    return a * (b / gcd(a, b));
}

}

1 Answers1

0

У вас не задаётся в тестах отдельное число K -- количество чисел в каждом тесте.

Вероятно, после ввода количества тестов N данные для каждого теста необходимо обрабатывать построчно, т.е. прочесть строку при помощи Scanner::nextLine, разбить её по пробелам и распарсить числа.

При использовании Scanner::nextLine после Scanner::nextInt также придётся принять предупредительные меры, в виде считывания int n = Integer.parseInt(sc.nextLine());

 public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = Integer.parseInt(sc.nextLine());
    if (n == 0) {
        System.out.println("NO SOLUTION");
    } else {
        for (int i = 0; i < n; i++) {
            String[] strs = sc.nextLine().split(" "); // k = strs.length!
            int[] nums = new int[strs.length];
        for (int j = 0; j &lt; strs.length; j++) {
            nums[j] = Integer.parseInt(strs[j]);
        }
        int gcd = nums[0];
        int lcm = nums[0];
        for (int j = 1; j &lt; nums.length; j++) {
            gcd = gcd(gcd, nums[j]);
            lcm = lcm(lcm, nums[j]);
        }
        System.out.println(gcd + &quot; &quot; + lcm);
    }
}

}

Nowhere Man
  • 15,995
  • 33
  • 19
  • 29