Осуществить сдвиг массива вправо на 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, чтобы указать, что программа успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д