Délka nejdelší vzestupně uspořádané podposloupnosti – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Délka nejdelší vzestupně uspořádané podposloupnosti – Java – Fórum – Programujte.comDélka nejdelší vzestupně uspořádané podposloupnosti – Java – Fórum – Programujte.com

 

Tomáš
~ Anonymní uživatel
560 příspěvků
22. 12. 2016   #1
-
0
-

Ahoj,

potřeboval bych pomoct, potřebuju naprogramovat program, který mi jako výsledek vyhodí délku posloupnosti. Třeba zadám čísla 1 2 3 4 5 6 7 4 5 6 a výsledek bude 7, protože posloupnost platí do sedmi, pak začíná jiná. Nechci ale použít typ pole, to mi to dost ztěžuje. 

Zatím jsem vymyslel toto:

public class Podpolsoupnost {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int cislo = 0;
        int rozdil = 0;
        int delka = 1;
        int number = 0;
        int prvni = 0;
        int druhe = 0;
        int celkovadelka = 0;
        System.out.println("Zadej počet čísel v posloupnosti");
        int count = sc.nextInt();
        System.out.println("Zadej čísla posloupnosti");
        for (int i = 0; i < count; i++) {
            number = sc.nextInt();
            cislo = number;
                prvni = cislo;
                druhe = prvni;
        }
        rozdil = prvni - druhe;
        if (prvni - druhe != rozdil) {
            celkovadelka = delka;
            delka = 1;
        } else {
            if(prvni - druhe == rozdil){
                delka++;
            }
        }

        System.out.println(celkovadelka);
    }
}

Nemohl byste mi někdo prosím poradit, jak to upravit nebo co by se s tím dalo dělat, aby to fungovalo?

Nahlásit jako SPAM
IP: 2a00:1028:96d2:3baa:91d:6...–
gna
~ Anonymní uživatel
1891 příspěvků
22. 12. 2016   #2
-
0
-

Nechápu, co zkoušíš s tím rozdílem. Tady není potřeba něco koumat, napiš to, jako bys po těch číslech jel prstem. Patří do řady = započítám. Nepatří = počítám další řadu. A pamatuju si do kolika nejvíc jsem napočítal.

Nahlásit jako SPAM
IP: 213.211.51.–
gna
~ Anonymní uživatel
1891 příspěvků
22. 12. 2016   #3
-
0
-

   

int count = sc.nextInt();
int maxdelka = 0, delka = 0, predchozi = 0;
for (int i = 0; i < count; i++) {
	int cislo = sc.nextInt();
	if (delka < 1 || cislo == predchozi+1/*???*/) {
		delka++;
	} else {
		if (delka > maxdelka) maxdelka = delka;
		delka = 1;
	}
	predchozi = cislo;
}
System.out.println("nejdelsi " + maxdelka);
Nahlásit jako SPAM
IP: 213.211.51.–
gna
~ Anonymní uživatel
1891 příspěvků
22. 12. 2016   #4
-
0
-

Mám tam chybu - pokud nebude ta řada přerušená jinou, tak se nezapočítá. Dej ten test délky ještě za ten for.

Nahlásit jako SPAM
IP: 213.211.51.–
Tomáš
~ Anonymní uživatel
560 příspěvků
23. 12. 2016   #5
-
0
-

Ten rozdíl mě napadlo, protože v té posloupnosti můžou být i jiná čísla, než jen vždy o jedno větší. Může to být 1 2 3 4 5 6 7 4 5 6 atd., ale i klidně i třeba  11 22 33 44 59 74... , kde už není posloupnost vždy o jednu. Jak to myslíš jště za for, mě to nevyhodí žádné výsledky, když ten test délky posunu. 

Nahlásit jako SPAM
IP: 2a00:1028:96d2:3baa:15a0:...–
Mutagen
~ Anonymní uživatel
549 příspěvků
24. 12. 2016   #6
-
0
-

Projížděj čísla a porovnávej jestli aktuální číslo je větší než předchozí a zároveň menší než následující, jakmile tahle podmínka nebude splněna tak začíná nová posloupnost.

Popřípadě můžeš si vytvořit 2 listy (dyn. pole) Jeden list budeš ukládat čísla co přečteš a při nesplnění té podmínky vložíš celý list do listu takže vlastně budeš mít uložený všechny posloupnosti v polích.

Snad jsem do vysvětlil dobře :D

Nahlásit jako SPAM
IP: 89.190.90.–
Tomáš
~ Anonymní uživatel
560 příspěvků
24. 12. 2016   #7
-
0
-

Vysvětlil, ale vtip je v tom to pole nepoužít, já se to snažím udělat bez toho. S polem bych taky věděl, jak to udělat

Nahlásit jako SPAM
IP: 2a00:1028:96d2:3baa:25ce:...–
lukas.balaz0
Super člen
25. 12. 2016   #8
-
0
-

#7 Tomáš
Prečítaj si ešte raz celé toto vlákno, správne riešenie tu bolo dvakrát popísané a raz napísané kódom. V tom kóde len namiesto `cislo == predchozi+1` má byť `cislo > predchodzi` a za for tesne pred výpis vlož: `if (delka > maxdelka) maxdelka = delka;`. Ak tomu stále nebudeš chápať, napíš to funkčné riešenie s poľom (ako v poslednom príspevku píšeš, že by si vedel urobiť), a keď to budeš mať, lahšie pochopíš, ako to pole odstrániť.

Nahlásit jako SPAM
IP: 80.242.41.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

Podobná vlákna

Tisk uspořádané matice — založil Honza

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý