Učešljavanje nizova

Neka su data dva niza celih brojeva veličine $n$. Napisati funkciju koja učešljava ta dva niza u novi niz dužine $2n$. Učešljavanje se izvršava tako što se prvo uzme prvi element prvog niza, te prvi element drugog niza, te drugi element prvog niza, te drugi element drugog niza, itd.

Ulaz

Sa standardnog ulaza se učitava broj elemenata niza $n$ ($1 \leq n \leq 10^6$). U sledeća dva reda, učitava se, respektivno, po $n$ elemenata prvog i drugog niza iz opsega od $-10^9$ do $10^9$.

Izlaz

Na standardni izlaz ispisati niz dobijen učešljavanjem prva dva.

Primer

Ulaz

10
0 0 0 0 0 0 0 0 0 0
0 1 2 3 4 5 6 7 8 9

Izlaz

0 0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9

Rešenje

main.c

#include <stdio.h>
#include <stdlib.h>

int *interleave(const int *arr1, const int *arr2, int n)
{
	int *res = malloc(2 * n * sizeof (int));
	if (res == NULL) {
		free(arr1);
		free(arr2);	
		exit(EXIT_FAILURE);
	}	

	int *out = res;
	for (size_t i = 0; i < n; i++) {
		*out = arr1[i]; out++;
		*out = arr2[i]; out++;
	}

	return res;
}

int main(void)
{
	size_t n;
	scanf("%zu", &n);

	int *arr1 = malloc(n * sizeof (int));
	if (arr1 == NULL) {
		exit(EXIT_FAILURE);
	}

	int *arr2 = malloc(n * sizeof (int));
	if (arr2 == NULL) {
		free(arr1);
		exit(EXIT_FAILURE);
	}

	for (size_t i = 0; i < n; i++) {
		scanf("%d", &arr1[i]);
	}	

	for (size_t i = 0; i < n; i++) {
		scanf("%d", &arr2[i]);
	}

	int *out = interleave(arr1, arr2, n);

	for (size_t i = 0; i < 2 * n; i++) {
		printf("%d ", out[i]);
	}
	printf("\n");

	free(arr1);
	free(arr2);
	free(out);

	exit(EXIT_SUCCESS);
}