Осуществить сдвиг массива вправо на k позиций - C (СИ)

  1. Осуществить сдвиг вправо на k позиций, где k-число элементов, расположенных между его минимальным и максимальным элементами


textual

Код к задаче: «Осуществить сдвиг массива вправо на k позиций - C (СИ)»

#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;
}

СДЕЛАЙТЕ РЕПОСТ

6   голосов, оценка 4.333 из 5



Похожие ответы
  1. Осуществить циклический сдвиг элементов столбцов матрицы на m элементов вправо. Подскажите как реализовать. Заранее спасибо

  1. Доброго всем дня! Нужно решить следующую задачу, а в голове у меня не укладывается как именно отобразить это в коде. Искала инфу по всему инету, есть поиск положительных и каких угодно чисел, а такого нет.. Кто знающий, помогите! Задача: Осуществить поиск элемента массива, который содержит только нечётные цифры

  1. Дан массив A[N]. заполнить массив В[N] элементами массива A[N], которые удовлетворяют двойному неравенству: A[1]< A[i] или A[i]< A[10]. Незаполненные элементы массива В[N] заполнить оставшимися элементами массива A[N]. Осуществить сдвиг вправо на k позиций, где k – число оставшихся элементов массива A[N]. Как можно решить данную задачу? Прошу помочь Если не сложно можете сразу с кодом написать Хочу раз и навсегда понять и запомнить данную задачу

  1. Здравствуйте! Несколько месяцев назад дали задания по динамическим массивам: Дана матрица А[m,n] и массив B[m]. Вставить после каждого столбца, содержащего четное количество элементов массива B столбец, содержащий элементы этого массива, при каждой вставке циклически сдвигая их на один элемент вниз. Я 3 раза переписывал код и он никак не хочет работать, кто-нибудь сможет найти ошибку? А то я уже вот код:C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 #include "stdafx.h" #include #include #include #include     int** inputmatr(int, int); void poisk(int*, int**, int, int); void vstavka(int*, int**, int*, int, int, int);     int main() {     int m, n;     m = 0;     n = 0;         scanf_s("%d", &m);//строки     scanf_s("%d", &n);//столбцы     int* array = (int*)malloc(sizeof(int)*m);     free(array);     printf("Massiv A: \n");     for (int i = 0; i < m; i++)     {         array[i] = 0 + rand() % 10;         printf("%4d", array[i]);     }     printf("\n");     int** matr = inputmatr(m, n);     printf_s("\n");     poisk(array, matr, m, n);     system("pause");     return 0; }     int** inputmatr(int m, int n) {     int** matr = (int**)malloc(sizeof(int*) * n);       for (int i = 0; i < m; i++)     {         matr[i] = (int*)malloc(sizeof(int) * m);     }     printf("matriza: \n");     for (int i = 0; i < m; i++)     {         for (int j = 0; j < n; j++)         {             matr[i][j] = 0 + rand() % 10;             printf("%4d",matr[i][j]);         }         printf("\n");     }     return matr; }   void poisk(int *arr, int **mtx, int m, int n) {     int chet = 0;     int kek = 0;     int* help = (int*)malloc(sizeof(int)*300);     for (int i = 0; i < n; i++)     {         for (int j = 0; j < m; j++)         {             for (int k = 0; k < m; k++)             {                 if (mtx[j][i] == arr[k])                 {                     chet++;                 }             }         }         if ((chet % 2 == 0) && (chet != 0))         {             help[kek] = i;             kek++;         }         chet = 0;     }     vstavka(arr, mtx, help, m, n, kek); }   void vstavka(int * arr, int **mtx, int * help, int m, int n, int kek) {     int** fin = (int**)malloc(sizeof(int*) * (n + kek));       for (int i = 0; i < m; i++)     {         fin[i] = (int*)malloc(sizeof(int) * m);     }     int chet = 0;     int rekt = 0;     for (int i = 0; i < (n+kek); i++)     {         if (i - 1 == help[rekt])         {             for (int j = 0; j < m; j++)             {                 fin[j][i] = arr[j];             }             rekt++;         }         else         {             for (int j = 0; j < m; j++)             {                 fin[j][i] = mtx[j][chet];             }             chet++;         }     }     printf("matriza fin: \n");     for (int i = 0; i < m; i++)     {         for (int j = 0; j < n; j++)         {             printf("%4d", fin[i][j]);         }         printf("\n");     } }

  1. Помогите пожалуйста Организация:очередь Создать список из заданного количества элементов. Выполнить циклический сдвиг этого списка на N элементов вправо или влево.

  1. Пользователь вводит с клавиатуры денежную сумму в гривнах и копейках (гривны и копейки вводятся в разные переменные). Сумма может быть введена как правильно (например 19грн. 90 коп), так и неправильно (например 22грн. 978 коп). Написать программу, которая, используя только линейный алгоритм, осуществит корректировку введенной денежной суммы в правильную форму. Например, если пользователь ввел 11грн 150 коп, программа должна вывести на экран сумму 12грн. 50 коп.

  1. Задано вектор T(n), 12<=n. Сформувати вектор Y с элементов T[i], что передають самому большому элементу вектора T. Сделать сдвиг полученого масива на одну позицию вправо. p.s вектор Т должен быть сдвинут на 1 позицию вправо а он у меня сдвинут в левоC++1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 #include #include #include #include #include #include #include   int main() { int T[12], i, n, maxx, minx, M, temp; int* a; printf("Vvedite n <= 12, n= "), scanf("%i", &n); while (n > 12) { system("cls"); printf("Vvedite n <= 12, n= "), scanf("%i", &n); } srand(time(NULL)); printf("Vektor Y\n|"); minx = 12; maxx = 0; for (i = 0; i < n; i++) { T[i] = rand() %500; printf(" %i |", T[i]); if (T[i] > maxx) { maxx = T[i]; } if (T[i] < minx) { minx = T[i]; } } M = (minx + maxx) / 2; M++; printf("\n\n"); srand(time(NULL)); printf("Vektor T\n|"); for (i = 0; i < n; i++)       temp = T[0];     for (i = 0; i < n; i++)         T[i] = T[i + 1];     T[n - 1] = temp;     for (i = 0; i < n; i++)         printf("\ %i |", T[i]);         if (T[i] > maxx) { maxx = T[i]; } if (T[i] < minx) { minx = T[i]; }     getch();     return 0; }

  1. если не сложно напише код если не сложно буду очень благодарен

  1. Требуется: С помощью рекурсивной функции осуществить поиск минимального элемента одномерного массива Массив, предположим, состоит из 10 элементов (мне не надо делать массив, в котором размерность будет меняться или количество элементов), главное, чтоб все эти 10 элемнтов массива я мог задать в ручную (т.е. когда программа будет выполняться)На деле: компилятор выдает ошибки 1. invalid conversion from 'int' to 'int*' [-fpermissive] 2. initializing argument 1 of 'int minimal(int*)' [-fpermissive]C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include #include   int minimal (int min, int i, int a[10]) {     for (i; i<10; i++)     {         if (min>=a[i])         min=a[i];     }     return min; }   int main(void) {     int i=0;     int min=0;     int a[10];       for(i; i<10; i++)     {         printf("Vvedite znachenie elemnte %d massiva a: ", i);         scanf("%d", &a[i]);     }     min=a[i];     printf ("Minimalnoe znachenie massiva = %d", minimal(min, i, a[i]));     getch(); }

  1. Можно ли осуществить ввод расположения файла с клавиатуры? Если да, то как?