#include <iostream>
#include <ctime>
#include <vector>
#include <numeric>  // accumulate (összegzés)

using namespace std;

int main()
{
    setlocale(LC_ALL,"");
    // vector<int> tomegek={16, 8, 9, 4, 3, 2, 4, 7, 7, 12, 3, 5, 4, 3, 2};   # ez volt a forrásban

    // tesztelési célokra használható az alábbi vector
    vector<int> tomegek;
    int felsohatar;
    srand(time(NULL));
    for(int i=0;i<15;i++)
    {
        rand()%3+1==1 ? felsohatar=20: felsohatar=10;
        tomegek.push_back(rand()%felsohatar+1);
    }
    int targyak_szama=tomegek.size();
    cout << "Tömegek: ";
    for(auto tomeg:tomegek)
        cout << tomeg << " ";
    cout << endl;
    cout << "2. feladat" << endl;
    cout << "A tárgyak tömegének összege: " << accumulate(tomegek.begin(),tomegek.end(),0) << " kg" << endl;

    cout << "3. feladat" << endl;
    vector<int> dobozok;
    int egy_doboz=0;            // egy doboz üres állapottal "indul"
    for(int i=0;i<15;i++)
    {
        if(egy_doboz+tomegek[i]<=20)       // ha az aktuális tárgy beletehető egy dobozba,
            egy_doboz+=tomegek[i];          // akkor beletesszük (+)
        else                                // ha nem, akkor
        {
            dobozok.push_back(egy_doboz);   // előző dobozt a dobozokba helyezzük és
            egy_doboz=tomegek[i];           // az aktuális tárggyal új dobozt kezdünk
        }
        // ez a részprobléma sokféleképpen megoldható
        if((i+1)==targyak_szama)            // ha utolsó tárgyról van szó
            dobozok.push_back(egy_doboz);   // akkor az ő dobozát is tegyük a dobozokba
    }
    cout << "A dobozok tartalmának tömege (kg): ";
    for(auto doboz:dobozok)
        cout << doboz << " ";
    printf("\nA szükséges dobozok száma: %d\n",dobozok.size());

    return 0;
}
