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

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «Осуществить сдвиг элементов массива вправо на k позиций»

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.  
  5.       //         A[0]            A[N-1]
  6.       //         v               v
  7.       int A[] = {3,6,1,4,7,5,9,2,8};
  8.       int N = sizeof(A) / sizeof(int);
  9.       int B[N]; // вроде не по стандарту, но так проще всего.
  10.  
  11.       // вспомогательные переменные
  12.       int k = 0;
  13.       int i, j, offset;
  14.  
  15.       // выводим A.
  16.       printf("A = [_");
  17.       for (i=0; i<N; i++)
  18.         printf("%d_", A[i]);
  19.       printf("]\n");
  20.      
  21.       // найдём k.
  22.       for (i=0; i<N; i++)
  23.         if (A[0] < A[i] && A[i] < A[N-1])
  24.           k++;
  25.      
  26.       printf("k = %d.\n", k);
  27.      
  28.       for (i=0; i<N; i++)
  29.         B[i] = 0;
  30.  
  31.       printf("B = [_");
  32.       for (i=0; i<N; i++)
  33.         printf("%d_", B[i]);
  34.       printf("] (start) \n");
  35.  
  36.       // заполняем подходящими числами
  37.       j = 0;
  38.       for (i=0; i<N; i++)
  39.         if (A[0] < A[i] && A[i] < A[N-1]) {
  40.           B[j] = A[i];
  41.           j++;
  42.         }
  43.  
  44.       printf("B = [_");
  45.       for (i=0; i<N; i++)
  46.         printf("%d_", B[i]);
  47.       printf("] (1) \n");
  48.  
  49.       // заполним оставшимися числами
  50.       j = k;
  51.       for (i=0; i<N; i++)
  52.         if (!(A[0] < A[i] && A[i] < A[N-1])) {
  53.           B[j] = A[i];
  54.           j++;
  55.         }
  56.  
  57.       printf("B = [_");
  58.       for (i=0; i<N; i++)
  59.         printf("%d_", B[i]);
  60.       printf("] (2) \n");
  61.  
  62.       // сдвиг вправо
  63.       for (i=0; i<N; i++) {
  64.         if (k-1-i >= 0)
  65.           B[N-1-i] = B[k-1-i];
  66.         else
  67.           B[N-1-i] = 0;
  68.       }
  69.  
  70.       printf("B = [_");
  71.       for (i=0; i<N; i++)
  72.         printf("%d_", B[i]);
  73.       printf("] (3) \n");
  74.      
  75.       return 0;
  76. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

14   голосов , оценка 4.143 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы