Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Zdravím,
mám jednu početní úlohu.
Pro která 4 čísla (každé má vždy max 2 desetinná místa) platí a+b+c+d=9 a zároveň a*b*c*d=9
Výsledek má být přesně 9.
Zkoušel jsem to nějak počítat, ale nic mi z toho nelezlo a při hraní v Excelu jsem taky nedošel k výsledku. Jak to jednodušše spočítat?
Děkuji
Johny
Offline
↑ Johny123:
Máme 4 neznámé, ale 2 rovnice.
Také můžeme zkusit si 2 neznámé zvolit a zbylé 2 dopočítat (budeme mít 2 rovnice o 2 neznámých).
Možná musíme udělat několik voleb.
Offline
↑ Johny123:
Ahoj. Zkus si z toho udělat rovnice pro celá čísla, možná to pak půjde snadněji.
Offline
↑ Johny123:
Ahoj,
to má mít jenom devět řešení? Řekl bych, že jich bude daleko víc.
Online
očekával bych jen jedno řešení v oblasti kladných čísel. Možná jich bude více, když z toho budeme dělat vysokoškolské výpočty :)
Můžete mě trochu nakopnout? Programovat příliš neumím a přes rovnice to zkouším, ale není z toho žádný výsledek, který bych uměl spočítat... Díky
Offline
↑ Johny123:
Ale v zadání není ani čárka o tom, že ta čísla mají být kladná. A obávám se, že řešením rovnic to nepůjde. Máš dvě rovnice o čtyřech neznámých, tj. dvě neznámé bys musel nějak uhodnout (viz ↑ Richard Tuček:) a to se ti asi nepodaří (zvlášť když těch dvojic je asi víc). Nenapadá mě nic jiného, než hrubá síla, tj. počítač.
Online
Ok, tak já tě naučím druhý nejhorší programovací jazyk na světě. Vezmi tenhle kód a ulož ho do souboru s příponou html a potom ho jen odklepni, měl by se spustit v tvém default prohlížeči.
<!DOCTYPE html> <body> <script type="text/javascript"> for (a=0; a<=40; a++) { for (b=0; b<=40; b++) { for (c=0; c<=40; c++) { for (d=0; d<=40; d++) { if ((a+b+c+d==90) && (a*b*c*d==90000)) { document.write("a="+a/10+", b="+b/10+", c="+c/10+", d="+d/10+"<br>"); } } } } } </script> </body> </html>
Ovšem abych tu nedostal za uši, že v rozporu s pravidly poskytuju hotová řešení školních úloh, tak mi na oplátku napiš co znamenají čísla 90 a 90000, případně ještě kód uprav tak, aby našel alespoň jedno řešení obsahující alespoň jedno záporné číslo (ve skutečnosti ta záporná čísla budou právě dvě - proč?) :-)
Offline
↑ Johny123:
Těch řešení je 48. To v případě, kdy třeba
[a;b;c;d]= [3,6; 2,5; 2,5; 0,4]
a
[a;b;c;d]= [0,4; 2,5; 2,5; 3,6]
považuješ za různá řešení (což by matematik měl).
Online
↑ Aleš13:
Pozor - v zadání jsou dvě desetinná místa a dál psát nic nebudu, abych neprozradil tu "oplátku" :-)
Online
↑ Honzc:
Jde o to, zda to nemají být jenom kladná čísla - viz
Johny123 napsal(a):
očekával bych jen jedno řešení v oblasti kladných čísel.
Online
Ještě by tam mohla být tato možnost:
[-16.0, -0.15, +0.15, +25.0]
Offline
↑ Aleš13:
Ahoj, proč uvažuješ a,b,c,d jen do 40?
A jaký je ten první nejhorší jazyk? Makra v excelu? :-)
Offline
↑ Johny123:
V pohodě, vysvětlím.
Psal jsi, že maximálně dvě desetinná místa, já zkusil jedno a stačilo to. Proto jsem počítal s desetinásobky těch čísel (což je nejjednodušší cesta jak počítači vysvětlit to jedno desetinné místo). Takže 90 vznikne sečtením desetinásobků těch čísel, 90000 jejich vynásobením (jasně, taky jsem je moh vydělit deseti a pak sčítat a násobit, to by tam bylo těch 9 a 9 přímo ze zadání, ale bylo by to pomalejší a hrozily by zaokrouhlovací chyby). Stejně tak jsou cykly for (a=0; a<=40; a++) ve skutečnosti pro čísla od 0 do 4, tj. postupně se tam zkouší čísla 0, 0.1, 0.2, 0.3 až 3.9, 4. Kdybys chtěl najít záporná řešení, stačilo by zvětšit rozsah čísel která zkoušíš třeba od -15 do 5, v tomhle zápisu tedy for (a=-150; a<=50; a++). Zkus si to, jen to bude počítat dlouho (třeba minutu).
Offline
↑ check_drummer:
Jenom jsem to experimentálně omezil, aby to netrvalo moc dlouho a nepsalo moc výsledků, jinak by jich asi mohlo být víc. Ale já to pochopil tak, že stačí jediný. Nejhorší jazyk v jakém jsem kdy programoval je Cobol, ale to už nikdo nezná (až na toho pána ze správy sociálního zabezpečení, kterého tam myslím platí zlatem a dostávají panické ataky při představě, že by odešel do důchodu), tak jsem ho ani nezmiňoval :-)
Offline
↑ Aleš13:
V Cobolu je napsáno překvapivě hodně stále běžících aplikací...
Offline
Nevím jestli to bude rychlejší, ale s těmi celočíselnými proměnnými jsme to myslel tak, že máme součin 4 čísel roven 90 000 000, což rozložíme na prvočísla a pak hledáme jejich skupiny, aby součet byl 900.
Offline