Portál AbcLinuxu, 2. května 2025 05:08
Zadání je jednoduché: za 100 korun koupit tři druhy vajec, za 50 haléřů, za 3 koruny a za 10 korun, od každého druhu alespoň jeden kus a celkově 100 kusů.
Řešit to lze také jednoduše:
#include <stdio.h> /* * eggs.c * * Máme za 100 Kč koupit tři druhy vajec: * 1. druh za 0.5 Kč * 2. druh za 3.0 Kč * 3. druh za 10.0 Kč * od každého druhu alespoň jeden kus a celkově 100 kusů. * Kolik bude kusů jakého druhu musíme koupit? * */ int main() { int iEggs1Count = 0, iEggs2Count = 0, iEggs3Count = 0; const double dEgg1Price = 0.5, dEgg2Price = 3.0, dEgg3Price = 10.0; const int iEggsTotalCount = 100; const double dEggsTotalPrice = 100.0; for (iEggs1Count = 1; iEggs1Count < (iEggsTotalCount - 1); iEggs1Count++) { for (iEggs2Count = 1; iEggs2Count < (iEggsTotalCount - iEggs1Count); iEggs2Count++) { iEggs3Count = iEggsTotalCount - iEggs1Count - iEggs2Count; double dPrice = (iEggs1Count * dEgg1Price) + (iEggs2Count * dEgg2Price) + (iEggs3Count * dEgg3Price); if (!(dPrice > dEggsTotalPrice) && !(dPrice < dEggsTotalPrice)) { printf("%3d ks za 0.50 Kč = %6.2f Kč\n", iEggs1Count, (iEggs1Count * dEgg1Price)); printf("%3d ks za 3.00 Kč = %6.2f Kč\n", iEggs2Count, (iEggs2Count * dEgg2Price)); printf("%3d ks za 10.00 Kč = %6.2f Kč\n", iEggs3Count, (iEggs3Count * dEgg3Price)); printf("------ ---------\n"); printf("%3d ks %6.2f Kč\n", (iEggs1Count + iEggs2Count + iEggs3Count), dPrice); return 0; } } } return 1; }
Ale jde to nějak rozumě odvodit? Moc jsem nad tím nedumal, protože řešení znám...
Tiskni
Sdílej:
x+y+z=100
; 0,5x+3y+10z=100
), hledáte její celočíselné řešení s kladnými kořeny. Dá se upravit na jednu rovnici o dvou neznámých 5y × 19z = 100
(y
je počet vajíček za 3 Kč, z
počet vajíček za 10 Kč), z té už je vidět na první pohled (nebo zkusíte dosazování, 1 <= z <= 5
je 5 dosazení), že y = 1
(y
je počet vajíček za 3 Kč) a z = 5
(z
je počet vajíček za 10 Kč), počet vajíček za 50 hal se dopočítá z některé z obou rovnic (94).
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.