Осуществить сдвиг массива вправо на k позиций - C (СИ)
Формулировка задачи:
Осуществить сдвиг вправо на k позиций, где k-число элементов, расположенных между его минимальным и максимальным элементами
Решение задачи: «Осуществить сдвиг массива вправо на k позиций»
textual
Листинг программы
#include <stdio.h> #include <math.h> #define N 10 int IndexMin (int *mas) { int i; int min = 0; for (i=1; i<N; i++) if (mas[i] < mas[min]) min = i; return min; } int IndexMax (int *mas) { int i; int max = 0; for (i=1; i<N; i++) if (mas[i] > mas[max]) max = i; return max; } void Shift (int *mas, int k) { int i,j,tmp; for (i=1; i<=k; i++) { tmp = mas[N-1]; for (j=N-1; j>0; j--) mas[j] = mas[j-1]; mas[0] = tmp; } } int main() { int a[N]={0}; int i; for (i=0; i<N; i++) { printf ("A[%d] = ",i); scanf ("%d",&a[i]); } Shift (a,abs(IndexMax(a)-IndexMin(a)-1)); for (i=0; i<N; i++) printf ("%d ",a[i]); printf ("\n"); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с I/O и математическими операциями
- Определяем размер массива N, в данном случае равный 10
- Создаем функцию IndexMin, которая находит индекс минимального элемента в массиве
- Создаем функцию IndexMax, которая находит индекс максимального элемента в массиве
- Создаем функцию Shift, которая осуществляет сдвиг массива вправо на k позиций
- В функции main создаем массив a размером N и заполняем его значениями с помощью scanf
- Вызываем функцию Shift, передавая ей массив a и значение k, которое вычисляется как abs(IndexMax(a)-IndexMin(a)-1)
- Выводим значения массива a после сдвига на экран с помощью printf
- Возвращаем 0, чтобы указать, что программа успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д