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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
 
int main() {
 
      //         A[0]            A[N-1]
      //         v               v
      int A[] = {3,6,1,4,7,5,9,2,8};
      int N = sizeof(A) / sizeof(int);
      int B[N]; // вроде не по стандарту, но так проще всего.
 
      // вспомогательные переменные
      int k = 0;
      int i, j, offset;
 
      // выводим A.
      printf("A = [_");
      for (i=0; i<N; i++)
        printf("%d_", A[i]);
      printf("]\n");
      
      // найдём k.
      for (i=0; i<N; i++)
        if (A[0] < A[i] && A[i] < A[N-1])
          k++;
      
      printf("k = %d.\n", k);
      
      for (i=0; i<N; i++)
        B[i] = 0;
 
      printf("B = [_");
      for (i=0; i<N; i++)
        printf("%d_", B[i]);
      printf("] (start) \n");
 
      // заполняем подходящими числами
      j = 0;
      for (i=0; i<N; i++)
        if (A[0] < A[i] && A[i] < A[N-1]) {
          B[j] = A[i];
          j++;
        }
 
      printf("B = [_");
      for (i=0; i<N; i++)
        printf("%d_", B[i]);
      printf("] (1) \n");
 
      // заполним оставшимися числами
      j = k;
      for (i=0; i<N; i++)
        if (!(A[0] < A[i] && A[i] < A[N-1])) {
          B[j] = A[i];
          j++;
        }
 
      printf("B = [_");
      for (i=0; i<N; i++)
        printf("%d_", B[i]);
      printf("] (2) \n");
 
      // сдвиг вправо
      for (i=0; i<N; i++) {
        if (k-1-i >= 0)
          B[N-1-i] = B[k-1-i];
        else
          B[N-1-i] = 0;
      }
 
      printf("B = [_");
      for (i=0; i<N; i++)
        printf("%d_", B[i]);
      printf("] (3) \n");
      
      return 0;
}

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

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