Помогите пожалуйста, ооочень срочно!!!!. Напишите функцию Rotate(data []in
Помогите пожалуйста, ооочень срочно!!!!. Напишите функцию Rotate(data []int, pos int) []int, которая осуществляет циклический сдвиг элементов слайса чисел на заданное количество позиций.Пример: если data = [1,2,3,4,5,6,7] и pos = 3, то функция должна вернуть [5,6,7,1,2,3,4]Примечанияpos может быть отрицательным числом, а также больше длины слайса.
Вот решение вашей задачи на языке Go:
package main
import "fmt"
func Rotate(data []int, pos int) []int {
length := len(data)
if length == 0 {
return data
}
pos = pos % length
if pos < 0 {
pos += length
}
rotated := make([]int, length)
copy(rotated, data[length-pos:])
copy(rotated[pos:], data[:length-pos])
return rotated
}
func main() {
data := []int{1, 2, 3, 4, 5, 6, 7}
pos := 3
rotated := Rotate(data, pos)
fmt.Println(rotated)
}
В этом решении мы сначала проверяем, является ли длина слайса равной нулю, и если да, то возвращаем исходный слайс без изменений.
Затем мы приводим значение pos
к положительному числу, не превышающему длину слайса, используя операцию остатка от деления (%
). Если pos
отрицательное, мы добавляем к нему длину слайса.
Затем мы создаем новый слайс rotated
той же длины, что и исходный слайс, и копируем элементы из исходного слайса в новый слайс с учетом сдвига. Мы копируем элементы, начиная с позиции length-pos
до конца слайса, а затем копируем элементы с начала слайса до позиции length-pos
.
Наконец, мы возвращаем новый слайс rotated
.
В результате выполнения данного кода будет выведено [5 6 7 1 2 3 4]
, что соответствует ожидаемому результату.