#include <iostream>
#include <algorithm>
#include <numeric>
int main()
{
int sourceArr[8]{2, 5, 4, 3, 8, 7, 6, 1};
int arr1[4]{};
int arr2[4]{};
int i = 0;
int j = 0;
int k = 0;
/*std::sort(sourceArr, sourceArr + 8);*/
while (i < 4 && j < 4 && k < 8)
{
if (std::accumulate(arr1, arr1 + i, 0) < std::accumulate(arr2, arr2 + j, 0))
{
if (sourceArr[k] > sourceArr[k + 1])
{
arr1[i++] = sourceArr[k++];
arr2[j++] = sourceArr[k++];
}
else
{
arr2[j++] = sourceArr[k++];
arr1[i++] = sourceArr[k++];
}
}
else
{
if (sourceArr[k] < sourceArr[k + 1])
{
arr1[i++] = sourceArr[k++];
arr2[j++] = sourceArr[k++];
}
else
{
arr2[j++] = sourceArr[k++];
arr1[i++] = sourceArr[k++];
}
}
}
std::cout << std::accumulate(arr1, arr1 + 4, 0) << std::endl;
std::cout << std::accumulate(arr2, arr2 + 4, 0) << std::endl;
}
Coś takiego można wymodzić. Rozkład w tym przypadku nie jest idealny (przybliżony od równego podziału).
Równy podział uzyska się po uprzednim posortowaniu tablicy źródłowej.