Portál AbcLinuxu, 13. prosince 2025 12:37
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.