szallitas202310_DK_KSZ_C++.cpp

 1  #include <iostream>
 2  #include <ctime>
 3  #include <vector>
 4  #include <numeric>  // accumulate (összegzés)
 5  
 6  using namespace std;
 7  
 8  int main()
 9  {
10      setlocale(LC_ALL,"");
11      // vector<int> tomegek={16, 8, 9, 4, 3, 2, 4, 7, 7, 12, 3, 5, 4, 3, 2};   # ez volt a forrásban
12  
13      // tesztelési célokra használható az alábbi vector
14      vector<int> tomegek;
15      int felsohatar;
16      srand(time(NULL));
17      for(int i=0;i<15;i++)
18      {
19          rand()%3+1==1 ? felsohatar=20: felsohatar=10;
20          tomegek.push_back(rand()%felsohatar+1);
21      }
22      int targyak_szama=tomegek.size();
23      cout << "Tömegek: ";
24      for(auto tomeg:tomegek)
25          cout << tomeg << " ";
26      cout << endl;
27      cout << "2. feladat" << endl;
28      cout << "A tárgyak tömegének összege: " << accumulate(tomegek.begin(),tomegek.end(),0) << " kg" << endl;
29  
30      cout << "3. feladat" << endl;
31      vector<int> dobozok;
32      int egy_doboz=0;            // egy doboz üres állapottal "indul"
33      for(int i=0;i<15;i++)
34      {
35          if(egy_doboz+tomegek[i]<=20)       // ha az aktuális tárgy beletehető egy dobozba,
36              egy_doboz+=tomegek[i];          // akkor beletesszük (+)
37          else                                // ha nem, akkor
38          {
39              dobozok.push_back(egy_doboz);   // előző dobozt a dobozokba helyezzük és
40              egy_doboz=tomegek[i];           // az aktuális tárggyal új dobozt kezdünk
41          }
42          // ez a részprobléma sokféleképpen megoldható
43          if((i+1)==targyak_szama)            // ha utolsó tárgyról van szó
44              dobozok.push_back(egy_doboz);   // akkor az ő dobozát is tegyük a dobozokba
45      }
46      cout << "A dobozok tartalmának tömege (kg): ";
47      for(auto doboz:dobozok)
48          cout << doboz << " ";
49      printf("\nA szükséges dobozok száma: %d\n",dobozok.size());
50  
51      return 0;
52  }