Kezdőoldal » Számítástechnika » Programozás » Mi a hiba ebben a megoldasban?

Mi a hiba ebben a megoldasban?

Figyelt kérdés

https://www.gyakorikerdesek.hu/szamitastechnika__programozas..

Olvastam ezt a kerdest es gondoltam megcsinalom gyakorlaskeppen, itt a kodom: [link]

Java-ban csinaltam mert azt tanulok most. A kerdezo peldajara jol mukodik, de nagy szamok eseten sokszor negativ erteket ad vissza. Nagy meretu tombre pedig nagyon lassu. 100000 meretu tombre 15 masodperc alatt fut le nekem es a feladat szerint 200000 meretu lehet maximum a tomb.

Mit rontok el?



2020. szept. 1. 09:28
1 2
 1/19 anonim ***** válasza:

1, Azok a nagy számok, amikre negatív értéket ad, összeszorozva is elférnek egy int-ben?

2, Nyilván azért lassú, mert a brute force megoldásod nem az optimális algoritmus.


Ha még csak most tanulsz programozni, akkor ez a feladat nem neked való.

2020. szept. 1. 09:40
Hasznos számodra ez a válasz?
 2/19 A kérdező kommentje:

Erre nem gondoltam, de ha az osszeg valtozo tipusat long-ra valtoztatom akkor is kapok negativ szamokat. Pedig 2147483647^2 belefer 64 bitbe.

Mi az optimalis algoritmus? Ranezesre nem tunt nehez feladatnak azert probaltam meg.

2020. szept. 1. 10:04
 3/19 anonim ***** válasza:
50%
Én csak azért írok hogy kapjak értesítést ha az 1-es válaszol mert én is kíváncsi vagyok.
2020. szept. 1. 11:28
Hasznos számodra ez a válasz?
 4/19 anonim ***** válasza:
100%
#3 erre van a "figyelt kérdés" jelölőnégyzet. ;)
2020. szept. 1. 12:27
Hasznos számodra ez a válasz?
 5/19 anonim ***** válasza:
#4 köszi, ezentúl azt használom :)
2020. szept. 1. 12:33
Hasznos számodra ez a válasz?
 6/19 anonim ***** válasza:
0%

Ha én ilyet írnék, annak az algoritmusa nagyvonalakban így nézne ki:

tomb = [2,4,7]; out = amount = result = 0;

AMÍG tomb hossza >= 1 ADDIG{

FOR (i = 1; i < tomb hossza; i++){

out += tomb[0] * tomb[i];

}

tomb[0] törlése;

amount += out;

out = 0;

}

result = amount % 1000000007;


Mit csinál ez? Egy ciklusban beszorozza a tömb 1. elemét az utána következő összes többivel, majd törli az 1. elemet, és mindezt addig csinálja, amíg már csak 1 elem marad a tömbben. Közben a részeredményeket hozzáadja egy változóhoz, majd a végén kiszámolja a modulust.

Ahogy halad a művelet vége felé, annál kevesebb memóriát igényel a feladat, mert a tömb elemeinek száma folyamatosan csökken.

2020. szept. 1. 12:33
Hasznos számodra ez a válasz?
 7/19 anonim ***** válasza:
:DD. Tömb elemét törölgetni :D. OK. Akkor Te már nem tömbökkel akaraz dolgozni
2020. szept. 1. 12:43
Hasznos számodra ez a válasz?
 8/19 A kérdező kommentje:

6-os ez nem ugyanazt csinalja mint az en megoldasom, csak meg lassabb mert torolgetsz is?

Hogy torlod egyaltalan egy tomb elemet? Max az erteket tudod allitani nem?

A negativ ertekeken ez hogy segit?

2020. szept. 1. 12:44
 9/19 anonim ***** válasza:
0%

A kódodat nem néztem meg, viszont algoritmust kértél, ami tudomásom szerint nyelvfüggetlen. A JAVA-hoz nem értek, a fenti példám JavaScript-ben tökéletesen lefut. Ha nem a tömb 1. elemének törölgetését választanám, akkor 2 FOR ciklussal dolgoznék. A végeredmény ugyanaz. (Amint látom már a kódodat, a tiéd is így működik.)

Negatív értékek elkerüléséért meg használj BigIntegert. Azért kapsz negatív értéket, mert nem fér bele a végeredmény a változó típusába.

2020. szept. 1. 13:03
Hasznos számodra ez a válasz?
 10/19 A kérdező kommentje:

Tehat a te algoritmusod meg az enyemnel is lassabb. Ez volt az egyik problema a kettobol, hogy lassu.

BigInteger Java-ban ok, de sok mas nyelvben nincs (ugy latom az eredeti kerdes pl C++). De BigIntegerrel a modulonak sem lenne semmi ertelme. Gondolom azert ker modulot a feladat hogy nyelvfuggetlenul megoldhato legyen. En csak azert csinaltam Java-ban mert azt tanulok.

2020. szept. 1. 13:25
1 2

További 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!