Kezdőoldal » Számítástechnika » Programozás » Az alábbi feladatot hogyan...

Az alábbi feladatot hogyan kellene megoldani Java programozásban?

Figyelt kérdés
Oldjuk meg Euler problémáját: hány darabot vehetünk egyes állatokból? Összesen 100 állatot (sertést, kecskét és juhot) kell vásárolni összesen 100 aranyért. A sertés ára 3 és fél arany, a kecskéé 1 és egyharmad, a juhé fél arany.
2018. ápr. 2. 23:20
1 2
 11/18 anonim ***** válasza:

"100*100*100 = 10 millió kombináción végigpörög."

Ez igazából 101*101*101 :) És nem 10 millió, hanem kb. 1 millió.

2018. ápr. 3. 12:03
Hasznos számodra ez a válasz?
 12/18 anonim ***** válasza:

"Nem, leginkább azzal lehetne optimalizálni, hogy tisztán matekos fejjel felírjuk a 21s + 8k + 3j = 600 diofantoszi egyenletet és megoldjuk. Akkor nem kell végigpörgetni 10 millió megoldáson, elég lenne 2-szer legkisebb közös többszöröst számolni."


De azért írunk programot, hogy ne kelljen kiszámolni. Hanem a program erőből oldja meg.

A tied az tényleg megoldja erőből, de azért kicsit lehet rajta okosítani. Nyilván ezt meg lehet tenni sokféleképpen.


Én így csinálnám:


for (int s = 0; s <= CNT_ALL; s++) {

for (int k = 0; k <= CNT_ALL-s; k++) {

int j = CNT_ALL-s-k

checkSol(s,k,j)

}

}


Így máris 1 millió helyett csak 101+100+99+...+1=5151 esetet kell végignéznie. Vagyis csak a 200-ad részét.

2018. ápr. 3. 13:36
Hasznos számodra ez a válasz?
 13/18 A kérdező kommentje:
Igen, így arra az egyenletes hattérre gondoltam, a 6-al való szorzást sejtettem hogy az egész szám miatt kell. Nagyon sokat segített mindenki, köszönöm!
2018. ápr. 3. 15:59
 14/18 anonim ***** válasza:
Kerekek lesznek a számok, ha az egyhatod aranyt választod pénzegységnek.
2018. ápr. 3. 17:14
Hasznos számodra ez a válasz?
 15/18 anonim ***** válasza:

7884125 nevű felhasználó válasza:


System.out.println("lehetséges megoldások [s;k;j]:");

for (int s = 0; s <= 100; s++) {

for (int k = 0; k <= 100; k++) {

for (int j = 0; j <= 100; j++) {

if (21 * s + 8 * k + 3 * j == 600 && s + k + j == 100) {

System.out.println("[" + s + ";" + k + ";" + j + "]");

}

}

}

}

Ezt jól megoldotta a kolléga de arra figyelj hogy kérdés mennyi állatot!!! A végén így használd System.out.println("[" + s/6 + ";" + k/6 + ";" + j/6 + "]");


Bocsi ,hogy közbe szóltam :)

2018. ápr. 3. 19:04
Hasznos számodra ez a válasz?
 16/18 anonim ***** válasza:
utolsó vagyok.... én írtam hülyeséget... kell nekem fejbe gondolkozni :)) BOCSÁNAT
2018. ápr. 3. 19:24
Hasznos számodra ez a válasz?
 17/18 anonim ***** válasza:

Ez a jó igen System.out.println("[" + s + ";" + k + ";" + j + "]");


Csak lusta voltam megnyitni a netbeans-t és lefuttatni.. Fejbe meg már hülyülök megfele :D

2018. ápr. 3. 19:29
Hasznos számodra ez a válasz?
 18/18 anonim válasza:

Utolsónak: szép megoldás, bár a kollégáé 'hatékonyabbnak' tűnik egy fokkal.

Egyébként nem hajdúsági, nyírségi/ szabolcsi vagy?

2018. ápr. 4. 04:21
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!