Осуществить сдвиг массива вправо на 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;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы для работы с I/O и математическими операциями
  2. Определяем размер массива N, в данном случае равный 10
  3. Создаем функцию IndexMin, которая находит индекс минимального элемента в массиве
  4. Создаем функцию IndexMax, которая находит индекс максимального элемента в массиве
  5. Создаем функцию Shift, которая осуществляет сдвиг массива вправо на k позиций
  6. В функции main создаем массив a размером N и заполняем его значениями с помощью scanf
  7. Вызываем функцию Shift, передавая ей массив a и значение k, которое вычисляется как abs(IndexMax(a)-IndexMin(a)-1)
  8. Выводим значения массива a после сдвига на экран с помощью printf
  9. Возвращаем 0, чтобы указать, что программа успешно завершилась

Оцени полезность:

6   голосов , оценка 4.333 из 5
Похожие ответы