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