Cho mảng arr[] và số lẻ sum. Tạo mảng arr_2[] mà arr_2[i] = tổng sum/2 phần tử trước + arr[i] + sum/2 phần tử sau. Dùng kỹ thuật cửa sổ trượt.
Ví dụ
arr = {4, 1, 7, 5, 2, 9}, sum = 3
arr_2[0] = 4+1=5, arr_2[1]=4+1+7=12, arr_2[2]=1+7+5=13...
Ví dụ hoàn chỉnh
#include <bits/stdc++.h>
using namespace std;
void sum_array(int arr[], int size, int sum) {
int count = 0;
int arr_2[size];
int temp = sum / 2 + 1;
for (int i = 0; i < temp; i++)
count += arr[i];
arr_2[0] = count;
for (int i = 1; i < size; i++) {
int temp_1 = i - (sum / 2) - 1;
if (temp_1 >= 0)
count -= arr[temp_1];
int temp_2 = i + (sum / 2);
if (temp_2 < size)
count += arr[temp_2];
arr_2[i] = count;
}
cout << "Mảng tổng: ";
for (int i = 0; i < size; i++)
cout << arr_2[i] << " ";
}
int main() {
int arr[] = {4, 1, 7, 5, 2, 9, 6, 2, 1};
int sum = 3;
int size = sizeof(arr) / sizeof(int);
sum_array(arr, size, sum);
return 0;
}
Kết quả
Mảng tổng: 5 12 13 14 16 17 17 9 3