#include <iostream> #include <iterator> #include <algorithm> int* createSumArray(int* arr, int size) { int ti = 0; // target index int* ta = new int[size*(size+1)/2]; for (int s = 1; s <= size; ++s) // how many elements to sum { for (int si = 0; si < size + 1 - s; ++si) { ta[ti] = 0; for (int i = si; i < si + s; ++i) ta[ti] += arr[i]; ++ti; } } return ta; } void test(int* a, size_t N) { std::copy(a, a + N, std::ostream_iterator<int>(std::cout, ",")); std::cout << "\n"; int* ret = createSumArray(a, N); std::copy(ret, ret + N*(N+1)/2, std::ostream_iterator<int>(std::cout, ",")); std::cout << "\n"; delete [] ret; } int main() { { int a[] = {1}; test(a, sizeof(a)/sizeof(*a)); } { int a[] = {1,3,4,5}; test(a, sizeof(a)/sizeof(*a)); } { int a[] = {1,2,3,4,5,6,7,8,9,10}; test(a, sizeof(a)/sizeof(*a)); } }
Standard input is empty
1, 1, 1,3,4,5, 1,3,4,5,4,7,9,8,12,13, 1,2,3,4,5,6,7,8,9,10, 1,2,3,4,5,6,7,8,9,10,3,5,7,9,11,13,15,17,19,6,9,12,15,18,21,24,27,10,14,18,22,26,30,34,15,20,25,30,35,40,21,27,33,39,45,28,35,42,49,36,44,52,45,54,55,