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, chtěl bych se zeptat, jak by se měl vytvořit tento algoritmus v javě.
67 * 67 = 4489 -> 44 + 1 = 45
45 * 45 = 2025 -> 20 + 1 = 21
21 * 21 = 441 -> 44 + 1 = 45
a jakmile se stane, že se nějaká výsledná hodnota opakuje, jako tady např 45 cyklus se ukončí.
Napadá mě to nějak takto
Uživatel zadá číslo ....int cislo a do proměnné int a se uloží cislo*cislo/100+1 pak
do proměnné int b se uloží a*a/100+1 pak
do proměnné int c se uloží b*b/100+1
atd atd ještě to je třeba zobecnit nějak v cyklu aby se stále nevymýšlely nové proměnné, nevíte někdo jak to zobecnit? děkuji.
Offline
↑ aferon:
Jestli musis kontrolovat vsechna vysledna cisla proti aktualnimu, tak to ukladej do nejakeho pole a v cyklu generovani mej cyklus, ktery porovna aktualni hodnotu s kazdou hodnotou v poli.
Jen se zeptam:
67 * 67 = 4489 -> 44 + 1 = 45 - chces mit vzdy maximalne dvojciferne cislo, nebo chces mit vzdy minimalne dvojciferne cislo ( pro zadani cisla, ktere po prenasobeni povede na vice, jak ctyrciferne cislo dostanes po podeleni stem trojciferne cislo, atd..)?
Jak mas osetreno, kdyz bude vstup treba 2, 3, ..., potom budes mit:
(2 * 2 / 100) + 1 = 0;
(3 * 3 / 100) + 1 = 0;
...
btw co jsou v tvem prikladu do cyklu promenne a, b (jde o vysledne cislo z predesle iterace cyklu, nebo tam mas vice vstupu na pocatku, nebo ...)?
EDIT: prehledl jsem se, a, b jsout tedy cisla z predchazejiciho cyklu, potom tedy, jak jsem psal na zacatku si ukladej cisla do jednoho pole.
Systematicky neco jako toto, prepis si to do tebou znamych struktur v java (pokud s tim budes mit problem, tak dej vedet a dame to dohromady tady:
int input; // vstup
int[] data; // pole pro ulozeni dat
outerCycle // pres index i
innerCycle // pres index j, do (data.length - 1)
if (data[j] == data[data.length]) break;
endInnerCycle
data[i] = (data[i-1] * data[i-1] / 100) + 1;
endOuterCycleps: nezapomen na drobnou potiz s tim, ze v java si na pocatku vytvoris pole s konecnou velikosti, tedy muzes zalozit extra velke pole, abys mohl ukladat vsechna cisla a dat si do cyklu podminku, ze kdyz dojdes na posledni misto, tak to budto break(nout); nebo vytvorit nove velke pole a tam dale ukladat.
Ja bych doporucoval jednoduse si vytvorit navic jeden cyklus, kde budes pri kazde iteraci toho vnejsiho (outerCycle) vytvaret docasne pole (o velikosti o jedno vetsi nez stare pole), kam ulozis cisla ze stareho pole a posles to zpet jako novou deklaraci stareho pole s tvymi cisly (no a nove pole je diky tomu v kazde iteraci o jednu delku vetsi a ty muzes ukladat stale nove hodnoty) - rika se tomu dynamicky pole, najdi si to pres google, neni to nic narocneho, nebo jinak pokud jsi uz pracoval s jinymi strukturami.
Offline