C/C++

Помогите написать програму .Си!!!

Дано целочисленный массив A размера N. Переписать в новый
целочисленный массив B все четные числа из исходного массива (в том же
порядке) и вывести размер полученного массива B и его содержимое
Kabdeнov Caмam
Kabdeнov Caмam
20
#include <stdlib.h>
#include <stdbool.h>
#include <stdio.h>
#include <time.h>
#define RAND(min, max) (rand() % ((max) - (min)) + (min))
void fill(int* box, size_t n) {
size_t i;
srand((unsigned)time(NULL));
for (i = 0; i < n; ++i) box[i] = RAND(10, 100);
}
void show(int* box, size_t n, int w) {
size_t i;
for (i = 0; i < n; ++i) printf("%*i", w, box[i]);
puts("");
}
size_t count_even(int* box, size_t n) {
size_t i, count = 0U;
for (i = 0; i < n; ++i) if (~box[i] & 1) ++count;
return count;
}
void copy_if_even(int* dest, int* src, size_t n) {
size_t i, j = 0U;
for (i = 0; i < n; ++i) if (~src[i] & 1) dest[j++] = src[i];
}
int main() {
const char* err = "Not enough memory!";
int* a = NULL;
int* b = NULL;
size_t na, nb;
int w = 4;
printf("n: ");
scanf_s("%u", &na);
a = (int*)malloc(na * sizeof(int));
if (a != NULL) {
fill(a, na);
show(a, na, w);
nb = count_even(a, na);
b = (int*)malloc(nb * sizeof(int));
if (b != NULL) {
copy_if_even(b, a, na);
show(b, nb, w);
free(b);
} else {
puts(err);
}
free(a);
} else {
puts(err);
}
system("pause > nul");
}
__ Саша __
90 711
Лучший ответ
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
const int N = 20;
int new_size = 0;
int A[N], B[N];
srand(time(NULL));
for(int x = 0; x < N; x++)
{
A[x] = rand() % 31;
printf("%d ", A[x]);
if(x % 2 == 1) B[new_size++] = A[x];
}
printf("\n\n");

printf("Размер массива B = %d.\n", new_size);
for(int x = 0; x < new_size; x++)
printf("%d ", B[x]);
printf("\n");

return 0;
}