#include <stdio.h>
#include <stdlib.h>
int* products_n_consecutive_items(const int *arr, size_t size, size_t n_consecutive_items, size_t *out_size) {
if (n_consecutive_items == 0 || size < n_consecutive_items) {
*out_size = 0;
return NULL;
}
*out_size = size - n_consecutive_items + 1;
int *products = malloc((*out_size) * sizeof(int));
if (!products) {
perror("malloc failed");
exit(EXIT_FAILURE);
}
for (size_t i = 0; i < *out_size; i++) {
int prod = 1;
// Multiply arr[i] * arr[i+1] * ... * arr[i+k-1]
for (size_t j = 0; j < n_consecutive_items; j++) {
prod *= arr[i + j];
}
products[i] = prod;
/*
* for k = 3:
* 2 * 3 * 4 = 24
* 3 * 4 * 5 = 60
* 4 * 5 * 6 = 120
* 5 * 6 * 7 = 210
* 6 * 7 * 8 = 336
* 7 * 8 * 9 = 504
* 8 * 9 * 10 = 720
*/
}
return products;
}
int main(void) {
int arr[] = {2, 3, 4, 5, 6, 7, 8, 9, 10};
size_t size = sizeof(arr) / sizeof(arr[0]);
size_t n_consecutive_items = 3;
size_t out_size;
int *products = products_n_consecutive_items(arr, size, n_consecutive_items, &out_size);
printf("[");
for (size_t i = 0; i < out_size; i++) {
printf("%d", products[i]);
if (i + 1 < out_size) printf(", ");
}
printf("]\n");
free(products);
return 0;
}
/*
run:
[24, 60, 120, 210, 336, 504, 720]
*/