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