Anonymní profil Honza – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Honza – Programujte.comAnonymní profil Honza – Programujte.com

 

Příspěvky odeslané z IP adresy 2a00:1028:96d2:3baa:fc60:...–

Honza
Java › Nalezení počtu dělitelů posl…
22. 12. 2016   #214180

Ahoj, chtěl bych poprosit o pomoc, já už si nevmí rady. Mám zadaný úkol, že mám naprogramovat program, který bude zjišťovat, kolik prvků posloupnosti celých kladných čísel má stejný počet netriviálních dělitelů jako první prvek této posloupnosti (například 4 má jednoho dělitele, protože 1 a 4 se nepočítá, a dále je číslo dělitelné jen 2). Problém je, že nesmím použít typ pole.

Program mi už víceméně funguje, jenže v některých případech vyhazuje špatné výsledky. Funguje to tak, že pokud zadám například čísla 2 2 3 15, výsledek bude 2, protože první číslo 2 nemá netriviálního dělitele a další čísla, která mají stejný počet dělitelů (0) jsou 2 a 3, tedy dvě čísla. Problém nastává když zadám posloupnost, která má jen jedno číslo. Pokud zadám třeba 3, výsledek by měl být 0, protože nejsou žádná další čísla ke srovnávání. Jenže to nefunguje, pokud je zadané číslo prvočíslo. Prvočíslo mi jako výsledek dá 1 a ne požadovanou nulu. 

Chtěl bych tedy poprosit, jestli by mi mohl někdo poradit co s tím, nebo kde je chyba, já už si nevím rady.

public class Pocet {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int pocet = 0;
        int pocet2 = 0;
        int celkovypocet = 0;
        int pocetprvnihocisla = 0;
        int pocetdruhehocisla = 0;
        int cislo;
        System.out.println("Zadej kolik posloupností budeš zadávat. ");
        int count = sc.nextInt();
        System.out.println("Zadej čísla posloupnosti. ");
        for (int i = 0; i < count; i++) {
            int number = sc.nextInt();
            while (number > 0) {
                for (int k = 1; k <= number; k++) {
                    if (number % k == 0) {
                        pocet2++;
                        if (k == number) {
                            pocetdruhehocisla = pocet2 - 2;
                            if (pocetdruhehocisla < 0) {
                                pocetdruhehocisla = 0;
                            }
                            pocet2 = 0; 
                        }
                    }
                }
                if (pocetprvnihocisla == pocetdruhehocisla) {
                    celkovypocet++;
                }
                cislo = number;
                for (int j = 1; j <= cislo; j++) {
                    if (cislo % j == 0) {
                        pocet++;
                        if (j == cislo) {
                            pocetprvnihocisla = pocet - 2;
                            if (pocetprvnihocisla < 0) {
                                pocetprvnihocisla = 0;
                            }
                            pocet = 0;
                        }
                    }
                }
                number = sc.nextInt();
            }
            System.out.println(pocetdruhehocisla);
            System.out.println(pocetprvnihocisla);
            System.out.println(celkovypocet);
            pocetprvnihocisla = 0;
            pocetdruhehocisla = 0;
            celkovypocet = 0;
        }
    }
}
    

 

 

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