вращающийся на n элемент массива Java дает неверный результат в тесте - PullRequest
0 голосов
/ 12 января 2019

У меня проблема с упражнением, пытающимся ее решить. Вот задача:

Напишите программу, которая перемещается, поворачивая список несколько раз (первый элемент становится последним).

list = 1,2,3,4,5 and N = 2 -> result = 3,4,5,1,2

Обратите внимание, что N может быть больше, чем длина списка, в этом случае вы будете поворачивать список несколько раз.

list = 1,2,3,4,5 and N = 6 -> result = 2,3,4,5,1

Input На первой строке вы получите список номеров. На второй линии вы получите N

Выход В единственной строке выведите числа, разделенные пробелом.

Вот ТЕСТ:

ТЕСТ 1:

Ввод 5,3,2,1 2

Выход 2,1,5,3

ТЕСТ 2:

Ввод 2,1,3,4 5

Выход 1,3,4,2

Вот мой код:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();

        String[] elements = input.split(",");
        int[] array = new int[elements.length];

        for (int i = 0; i < elements.length; i++) {
            array[i] = Integer.parseInt(elements[i]);
        }

        int a = scanner.nextInt();


        int[] rotated = new int[elements.length];


        for (int x = 0; x <= array.length - 1; x++) {
            rotated[(x + a) % array.length] = array[x];
        }


        for (int i = 0; i < rotated.length; i++) {

            if (i > 0) {
                System.out.print(",");
            }
            System.out.print(rotated[i]);


        }
    }
}

Первый тест пройден. Но второй тест не пройден, и моя программа выдает неверный результат: 4,2,1,3 вместо правильного: 1,3,4,2.

Я не могу понять, в чем проблема.

Заранее благодарю за любую помощь.

1 Ответ

0 голосов
/ 12 января 2019

Ваша логика может быть упрощена до:

public static void shiftLeft(int shiftBy, int arr[]) {
    for (int j = 0; j < shiftBy; j++) {
        int a = arr[0];                         // storing the first index
        int i;
        for (i = 0; i < arr.length - 1; i++) {  // shifting the array left
            arr[i] = arr[i + 1];
        }
        arr[i] = a;                             // placing first index at the end
    }
}

Теперь назовите это:

public static void main(String[] args) {
    //  Fetch all data from user as you have done

    int arr[] = { 1, 2, 3, 4, 5 };
    shiftLeft(n % arr.length, arr);

    // print out the array
}

Обратите внимание, что если число n больше, чем длина массива, вам не нужно его много раз сдвигать. Вместо этого вам просто нужно сдвинуть его n % arr.length раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...