Осуществить сдвиг элементов массива вправо на 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д