Forum » Programiranje » Pomoč pri pisanju programa v JAVI
Pomoč pri pisanju programa v JAVI
konan5 ::
Potrebujem pomoč pri pisanju programa. Namreč koda deluje normalno, vendar ko jo testiram (datoteko s testi smo dobili v šoli) mi javi napako med izvajanjem. Pomoje tudi koda ni uredu napisana, zato bi prosil za kakšen nasvet kako jo lahko izboljšam. Naloga se pa glasi: Napišite program, ki prebere pozitivni celi števili a in b in izpiše, koliko števil med
vključno a in vključno b je deljivih s katerimkoli izmed števil 2, 3 ali 5.
Hvala :)
vključno a in vključno b je deljivih s katerimkoli izmed števil 2, 3 ali 5.
Hvala :)
import java.util.Scanner; class Veckratniki { public static void main (String[] args) { Scanner sc = new Scanner(System.in); long a=sc.nextLong(); long b=sc.nextLong(); long rezultati=0; for (long v = a; v <= b; v++) { if (v%2==0){ rezultati++; } else if (v%3==0){ rezultati++; } else if (v%5==0){ rezultati++; } else if (v%2==0 && v%3==0){ rezultati--; } else if (v%2==0 && v%5==0){ rezultati--; } else if (v%3==0 && v%5==0){ rezultati--; } else if (v%2==0 && v%3==0 && v%5==0){ rezultati++; } } System.out.println(rezultati); } }
Mavrik ::
Nasvet: Preberi napako. Tam piše kaj je narobe. Glede na to kako je sestavljen tvoj post sploh nisi a ne?
The truth is rarely pure and never simple.
galu ::
Namesto tistih narobe spisanih if / else if špagetov, dej to:
P.S. V obzir vzemi tudi primer, ko je a večji od b.
if (v != 0 && (v%2 == 0 || v%3 == 0 || v%5 == 0)) { rezultati++; }
P.S. V obzir vzemi tudi primer, ko je a večji od b.
Tako to gre.
Zgodovina sprememb…
- spremenil: galu ()
konan5 ::
Mavrik sem še začetnik v programiranju tako, da mi ta napaka ne pove veliko kaj je narobe.
Probal sem tudi s kodo (spodaj), ampak dobim ven isto napako?
Probal sem tudi s kodo (spodaj), ampak dobim ven isto napako?
import java.util.Scanner; class Veckratniki { public static void main (String[] args) { Scanner sc = new Scanner(System.in); long a=sc.nextLong(); long b=sc.nextLong(); long rezultati=0; for (long v = a; v <= b; v++) { if (v%2==0 || v%3==0 || v%5==0){ rezultati++; } } System.out.println(rezultati); } }
konan5 ::
To je problem, samo napiše, da napaka je, je pa ne definira. Mogoče je kaj v zvezi z "učinkovitostjo" kode. Ko jo ročno testiram iz cmd-ja rabi program veliko preveč časa za vhode dolžine 10^18. Ena od omejitev pa je 1 sekunda in 32 megabajtov za vsak testni primer.
roko granata ::
Najlažje bo če skrajšaš kodo na potrbne tri vrstice.
Koraki si sledijo:
1. za vsa števila med prvim in drugim vohodom
2. preveri, če je število deljivo z 2 ALI 3 ALI 5,
3. če je pogoj resničen, povečaj izhod za ena
4. izpiši izhod
Zadnjih dveh izhodov s tem pristopom ne boš rešil v danem času. Takšne iteracije so pri števkah tipa long precej počasne.
Predvsem pa si omisli nek IDE, ker v terminalu boš samo oddajal naloge.
Koraki si sledijo:
1. za vsa števila med prvim in drugim vohodom
2. preveri, če je število deljivo z 2 ALI 3 ALI 5,
3. če je pogoj resničen, povečaj izhod za ena
4. izpiši izhod
Zadnjih dveh izhodov s tem pristopom ne boš rešil v danem času. Takšne iteracije so pri števkah tipa long precej počasne.
Predvsem pa si omisli nek IDE, ker v terminalu boš samo oddajal naloge.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | (težava) long long v COddelek: Programiranje | 937 (693) | technolog |
» | Java metode;Oddelek: Programiranje | 4941 (4133) | ragezor |
» | [Java] Kako filtrirati, katera števila lahko vpišeš?Oddelek: Programiranje | 2079 (1781) | fiction |
» | [C++] novi standardi in compilerjiOddelek: Programiranje | 1608 (1201) | Ezekiel |
» | [C/C++] unsigned long lala = -1;Oddelek: Programiranje | 1167 (1126) | Vesoljc |