How to multiply every N consecutive items in an array with C

1 Answer

0 votes
#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]

*/

 



answered Feb 1 by avibootz

Related questions

...