В массиве X[N] перед каждым чётным элементом вставить его удвоенное значение - C (СИ)
Формулировка задачи:
Буферный массив не использовать. Размерность и элементы массива вводит пользователь. Помогите пожалуйста с кодом.
Решение задачи: «В массиве X[N] перед каждым чётным элементом вставить его удвоенное значение»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i, j, count = 0, *arr;
unsigned N;
puts("Enter array's size:");
while(1 != scanf("%u", &N)){
puts("Error!Try again:");
getchar();
}
arr = malloc(N * sizeof *arr);
srand(time(NULL));
for(i = 0; i < N; i++){
printf("%d ", *(arr + i) = rand() % 30 - 14);
if(!(*(arr + i) & 1))
count++;
}
putchar('\n');
arr = realloc(arr, (N + count) * sizeof*arr);
for(i = N + count - 1, j = N - 1; j >= 0; j--, i--){
if(!(*(arr + j) & 1)){
*(arr + i) = *(arr + j);
i--;
*(arr + i) = *(arr + j) * 2;
}
else
*(arr + i) = *(arr + j);
}
putchar('\n');
for(i = 0; i < N + count; i++)
printf("%d ", *(arr + i));
putchar('\n');
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Пользователю предлагается ввести размер массива.
- Массив инициализируется случайными целыми числами от -14 до 14.
- Переменная count отслеживает количество чётных элементов в массиве.
- Массив освобождается и заново выделяется память под массив, увеличенный на количество чётных элементов.
- В цикле добавляются чётные элементы, удваивая их значение и вставляя перед каждым чётным элементом.
- Выводится обновлённый массив.