Проблема с выводом изменённого массива на языке C

Задание: В массив из n элементов перед каждым k-ым элементом вставить сумму двух его соседних элементов.
Проблема заключается в том, что в новом массиве выводится не сумма соседних элементов от k, а сумма самого элемента k и члена справа от него, при этом выводится справа от самого элемента k
Исходный массив: 8 0 4 2 6 8 4 8
элемент k = 3
Новый массив, который получается при выполнении: 8 0 4 6 2 6 8 12 4 8
предоставляю код:

#include <stdio.h>

void insertSum(int arr[], int n, int k) {
    const int o = n + (n / (k - 1)); // Рассчитываем размер нового массива
    int result[o]; // Выбираем массив достаточного размера

    int j = 0;

    for (int i = 0; i < n; i++) {
        result[j++] = arr[i]; // Сначала добавляем текущий элемент

        if ((i + 1) % k == 0 && i + 1 < n) {
            // Если текущий элемент - k-ый, добавляем сумму arr[i] и arr[i+1]
            result[j++] = arr[i] + arr[i + 1];
        }
    }

    printf("Исходный массив:\n");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }

    printf("\n\nМассив после вставки суммы:\n");
    for (int i = 0; i < j; i++) {
        printf("%d ", result[i]);
    }

    printf("\n");
}

int main() {
    int n, k;

    printf("Введите размер массива: ");
    scanf("%d", &n);

    printf("Введите значение k: ");
    scanf("%d", &k);

    int arr[n];

    printf("Введите элементы массива:\n");
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    insertSum(arr, n, k);

    return 0;
}

Ответы (1 шт):

Автор решения: MBo

Ну так программа выполняет именно то, что вы написали // Сначала добавляем текущий элемент, измените логику.

Кроме того, я поправил расчёт размера выходного массива и количество выводимых его элементов

#include <stdio.h>

void insertSum(int arr[], int n, int k) {
    const int o = n + (n-1) / k; // Рассчитываем размер нового массива
    
    int result[o]; // Выбираем массив достаточного размера

    int j = 0;


     for (int i = 0; i < n; i++) {
            if ((i + 1) % k == 0 && i + 1 < n) {
                // Если текущий элемент - k-ый, добавляем сумму arr[i-1] и arr[i+1]
                result[j++] = arr[i-1] + arr[i + 1];
            }
            result[j++] = arr[i]; // Теперь добавляем текущий элемент
        }

    printf("Исходный массив:\n");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }

    printf("\n\nМассив после вставки суммы:\n");
    for (int i = 0; i < o; i++) {
        printf("%d ", result[i]);
    }

    printf("\n");
}

int main() {
    int n, k;

    printf("Введите размер массива: ");
    scanf("%d", &n);

    printf("Введите значение k: ");
    scanf("%d", &k);

    int arr[n];

    printf("Введите элементы массива:\n");
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    insertSum(arr, n, k);

    return 0;
}

n=8,k=3
Исходный массив:
1 2 3 4 5 6 7 8 

Массив после вставки суммы:
1 2 6 3 4 5 12 6 7 8
→ Ссылка