Проблема с выводом изменённого массива на языке 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