Szállítás
2023. október – középszint – Digitális kultúra
Adott egy sorrend, adott egy maximális doboztömeg (20 kg), és nem lehet átrendezni a tárgyakat. Sorban pakolunk, ha a következő már nem fér bele, új doboz indul.
Ez egy klasszikus „greedy” (kapzsi) feladat, de vizsgán sokan elrontják apróságokon.
Tipikus buktatók
1. ❌ Átrendezés (súly szerint pakolás)
-
Nem szabad optimalizálni.
-
Nem a lehető legkevesebb doboz kell, hanem a szabályok szerinti.
-
Ha valaki rendez, az automatikusan hibás megoldás.
👉 Javaslat: mindig hangsúlyozd magadban: „sorban érkeznek”.
2. ❌ Rossz pillanatban zárja le a dobozt
Gyakori hiba:
-
előbb hozzáadja a tárgyat,
-
csak utána veszi észre, hogy túllépte a 20 kg-ot.
👉 Javaslat:
Mindig előre gondolkodj:
-
„Ha ezt hozzátenném, beleférne még?”
3. ❌ Az utolsó doboz kimarad
Sokan:
-
csak akkor „mentik el” a dobozt, amikor túlcsordul,
-
az utolsó, még nyitott dobozt elfelejtik hozzáadni az eredményhez.
👉 Javaslat:
A ciklus végén mindig gondold végig, hogy van-e még „félig tele” doboz.
4. ❌ Össztömeg és doboztömeg összekeverése
-
A 2. feladat: összes tárgy tömege
-
A 3. feladat: dobozonkénti tömegek
Sokan:
-
ugyanazt az értéket használják mindkettőre,
-
vagy a dobozok összegét számolják újra feleslegesen.
👉 Javaslat:
Az össztömeg független a dobozolástól — egyszer számold ki, külön.
5. ❌ Nem általános megoldás
A feladat külön kiemeli:
„akkor is helyes megoldást adjon, ha a tömegek értékét módosítjuk”
Buktató:
-
beégetett dobozszám,
-
feltételezés, hogy mindig 15 elem van,
-
„kézzel” számolt határok.
👉 Javaslat:
A program csak a listára és a határértékre támaszkodjon, semmi másra.
6. ❌ Kimeneti forma pontatlansága
Gyakori hibák:
-
hiányzik a „2. feladat”, „3. feladat” felirat,
-
rossz szöveg,
-
rossz sorrend,
-
extra vagy hiányzó szóköz.
👉 Javaslat:
A mintát nem inspirációnak, hanem sablonnak tekintsd.
using System;
class Program
{
static void Main()
{
// 1. feladat: Tömegek tárolása
int[] tomeg = { 16, 8, 9, 4, 3, 2, 4, 7, 7, 12, 3, 5, 4, 3, 2 };
int n = 15;
// 2. feladat: Össztömeg
int ossztomeg = 0;
for (int i = 0; i < n; i++)
{
ossztomeg += tomeg[i];
}
Console.WriteLine("2. feladat");
Console.WriteLine("A targyak tomegenenek osszege: " + ossztomeg + " kg");
// 3. feladat: Dobozolás
int[] dobozok = new int[15]; // Max 15 doboz lehet
int dobozokSzama = 0;
int aktualisDoboztomeg = 0;
for (int i = 0; i < n; i++)
{
// Ha a tárgy belefér az aktuális dobozba
if (aktualisDoboztomeg + tomeg[i] <= 20)
{
aktualisDoboztomeg += tomeg[i];
}
else
{
// Lezárjuk az aktuális dobozt
dobozok[dobozokSzama] = aktualisDoboztomeg;
dobozokSzama++;
// Új dobozt kezdünk
aktualisDoboztomeg = tomeg[i];
}
}
// Az utolsó dobozt is lezárjuk
dobozok[dobozokSzama] = aktualisDoboztomeg;
dobozokSzama++;
// Kiírás
Console.WriteLine("\n3. feladat");
Console.Write("A dobozok tartalmának tomege (kg): ");
for (int i = 0; i < dobozokSzama; i++)
{
Console.Write(dobozok[i]);
if (i < dobozokSzama - 1)
Console.Write(" ");
}
Console.WriteLine();
Console.WriteLine("A szukseges dobozok szama: " + dobozokSzama);
}
}