Не считывает количество тестов

Рейтинг: -1Ответов: 1Опубликовано: 17.03.2023

Помогите с решением задачи. Проблема в том, что программа выводит ответ после ввода первой группы чисел. Несмотря на то, что ввожу количество тестов 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));
    }
}

Ответы

▲ 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 < strs.length; j++) {
                nums[j] = Integer.parseInt(strs[j]);
            }
            int gcd = nums[0];
            int lcm = nums[0];
            for (int j = 1; j < nums.length; j++) {
                gcd = gcd(gcd, nums[j]);
                lcm = lcm(lcm, nums[j]);
            }
            System.out.println(gcd + " " + lcm);
        }
    }
}