Смещение цикла в право, реализовал двумя циклами, нужно сделать без вложенного цикла, может кто подсказать?
Вот код:
import java.util.Scanner;
public class Program {
public static void main(String[] args) throws Exception {
Scanner scanner = new Scanner( System.in );
int a = scanner.nextInt();
int b = scanner.nextInt();
int[] x = new int[a];
for (int i = 0; i < a; i++) {
x[i] = scanner.nextInt();
}
int x1 = b%a;
for (int i = 0; i < x1; i++){
int temp = x[x.length - 1];
for (int j = x.length - 1; j > 0; j--)
x[j] = x[j - 1];
x[0] = temp;
}
for (int s: x){
System.out.print(s + " ");
}
}
}
Java
Как избавиться без вложенного цикла в java
import java.util.Scanner;
public class Program {
public static void main(String[] args) throws Exception {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
int[] x = new int[a];
for (int i = 0; i < a; i++) {
x[i] = scanner.nextInt();
}
int x1 = b % a;
int[] result = new int[a];
System.arraycopy(x, 0, result, x1, a - x1);
System.arraycopy(x, a - x1, result, 0, x1);
for (int s : result) {
System.out.print(s + " ");
}
}
}
В этом коде используется метод System.arraycopy(), который копирует элементы из одного массива в другой. Он позволяет скопировать элементы из исходного массива в новый массив без использования циклов. В данном случае мы копируем элементы из массива x в новый массив result, смещая их на x1 позиций вправо.
Денис Мартышев
Спасибо большое! Данный метод я не проходил, а задание дали без циклов
public static void shiftRight(int[] nums) {
int last = nums[nums.length - 1];
for (int i = nums.length - 2; i >= 0; i--) {
nums[i + 1] = nums[i];
}
nums[0] = last;
System.out.print("\nshifted Array: " + Arrays.toString(nums));
}
А что эта штука должна была делать, мы так и не узнаем? Кольцевой сдвиг массива на заданное число позиций? Причём, выполняемый почему-то сдвигами по одной позиции за раз. Напоминает анекдот, где свинью, спасшую жизнь ребёнку, рубили на сало по частям, потому что жалко было сразу зарезать.
Хвост длины a - x1 переставляем в начало, а начало длины x1 - в конец.
Как ниже указали, есть метод System.arraycopy, который копирует чуть быстрее, но внутри он крутит такой же цикл.
int x1 = b % a;
int[] r = new int[x.length];
for (int i = 0; i < x1; i++)
r[i + x.length - x1] = x[i];
for (int i = x1; i < x.length; i++)
r[i - x1] = x[i];
x = r; // или сразу печатать из r, а не из x
Хвост длины a - x1 переставляем в начало, а начало длины x1 - в конец.
Как ниже указали, есть метод System.arraycopy, который копирует чуть быстрее, но внутри он крутит такой же цикл.
Похожие вопросы
- Конструкция Java: i++ и ++i в циклах for
- Всем привет. Помогите плз. Мне нужна помощь тех кто действительно хорошо знает Java т. к мне нужно выбрать один из курсов
- Помогите доделать код на java. В форму пользователь вводит символ, который нужно заменить на #.
- Не выводит изображение в JAVA
- Java проблема с рефлексией.
- Язык JAVA - ЗАДАЧКА НА ЦИКЛЫ
- Java Developer vs Android Developer. Куда дальше?
- Пишут ли стартапы на Java?
- С какой книги начинать изучение Java?
- Помогите сделать java приложение! { СРОЧНО }