@AlekZzzI

Круговой массив java, как починить код?

В общем задание написать круговой массив, которая выводит путь, по которому, двигаясь интервалом длины m по заданному массиву,
концом будет являться первый элемент.
Началом одного интервала является конец предыдущего. Путь - массив из начальных элементов полученных интервалов, на ввод будет даваться m и n. Я написал программу, но она выдает не тот порядок что мне требуется
Должно быть так:
Пример 1:
n = 4, m = 3
Решение:
Круговой массив: 1234. При длине обхода 3 получаем интервалы: 123, 341. Полученный путь: 13.
Пример 2:
n = 5, m = 4
Решение:
Круговой массив: 123456. При длине обхода 4 получаем интервалы: 1234, 4512, 2345, 5123, 3451. Полученный
путь: 14253
А моя программа выдает при n = 5 m = 4 путь: 15432
import java.util.Scanner;

public class CircularArray {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter the number of elements in the array: ");
        int n = sc.nextInt();
        System.out.print("Enter the interval length: ");
        int m = sc.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = i + 1;
        }
        int current = 0;
        System.out.print("Path: ");
        for (int i = 0; i < n; i++) {
            System.out.print(arr[current]);
            current = (current + m) % n;
        }
    }
}
  • Вопрос задан
  • 334 просмотра
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019 Куратор тега Java
Bigdata Engineer
А моя программа выдает при n = 5 m = 4 путь: 15432

Код работает как написано. Только ты зря завел переменную current. Без нее можно обойтись.
Получается что ты шагаешь не через единичку а идешь длинными прыжками по модулю 5.
И тебе кажется что идешь назад.
for (int i = 0; i < n; i++) {
            System.out.print(arr[current]);
            current = (current + m) % n;
        }

Я-бы переписал проще.
for (int i = 0; i < n; i++) {
            System.out.print(arr[(i+ m) % n]);
        }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы