Diskuze: Najväčší delenec
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 7 zpráv z 7.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, skús napísať nejaký konkrétky príklad, číslo a čo potrebuješ aby bol výsledok, nie som si úplne istý či som to pochopil a na konkrétnom prípade sa takéto úlohy chápu najlepšie. (Inak prepáč že podpichnem, ale je buď "množina celých kladných čísel" alebo "kladných reálnych čísel" ale nie je "celých kladných reálnych čísel" .
S tými množinami máš pravdu tak teda - množina celých kladných čísel. Oukej skúsim nejaký príklad:
Dostávame: a = 2; pocet (počet čísel v poli) = 6; pole[]
= { 3, 4, 1, 2, 4, 3};
Hľadáme: Najdlhší súvislý úsek v poli, ktorého keď
jednotlivé prvky sčítame, tak dostaneme nejaké číslo. Ak toto číslo
vydelíme s a, teda v tomto konkrétnom prípade s dvojkou, tak
nám po delení ostane zvyšok práve 0. Ako výstup potrebujem vypísať na
jediný riadok dĺžku takého úseku.
V tomto prípade by bol výsledok 5. Môžeme napr. sčítať hneď prvých 5 prvkov, teda 3+4+1+2+4 = 14. Platí, že po operácii 14/2 dostaneme zvyšok 0. Žiaden dlhší súvislý úsek, ako 5 už dostať nemôžeme. O kratšie úseky sa nezaujímame. Čiže na výstup vypíšeme číslo 5.
Môže byť takýto vzorový príklad? Snáď som pomohol o niečo priblížiť môj problém.
Ahoj, na začiatku som si nevšimol že sa jedná o java fórum , ale to nevadí, napísal som ten program v C#, logiku určite pochopíš kód je takýto:
int a = 5;
// príklad na číslo
long x = 14285751;
string xHelp = x.ToString();
int pocet = x.ToString().Length;
// navacsi mozny delenec
int delenec = 0;
// prejde všetky kombinácie, začína sa na indexe 0, postupuje sa po 1
for (int i = 0; i<pocet; i++)
{
int sucet = 0;
for(int j = i; j<pocet; j++)
{
int number = (int)Char.GetNumericValue(xHelp[j]);
sucet += number;
if(sucet%a==0)
{
if(j-i+1>delenec)
{
delenec = j - i + 1;
}
}
}
}
Console.WriteLine(delenec);
Mne to funguje, tak si to už len napíš v Jave. Dúfam že som pomohol, ak
by som to predsa nepochopil, tak napíš a pozriem sa ešte na to.
P.S.: Jedná sa o algoritmus ktorý vlastne počíta všetky možné
kombinácie, takže sa nejedná o veľmi efektívny spôsob, ale priznám sa,
nemám veľmi naštudované algoritmy, ale pre tvoj príklad by to malo snáď
stačiť.
Inak, teraz ma napadlo, dalo by sa ešte kontrolovať, či súčasný počet čísel (delenec) je väčší rovný ako počet ciefier ktoré budeme kontrolovať, tak sa preruší cyklus, a algoritmus by bol menej náročný.
wow. Klobúk dole rozmýšľal som nad tým až príliš zložito a ono to je v podstate takto ľahké? Ďakujem za pomoc. Ja si to predčasné prerušenie cyklu už budem vedieť urobiť.
Som rád že som pomohol, ono to je tak ako píšeš, mne sa tiež veľa
krát stalo, že človek hľadá ťažké riešenie a pritom to je ľahké a sa
potom bije do hlavy ako je možné, že mu to hneď nenapadlo
Drž sa
Zobrazeno 7 zpráv z 7.