193 / 277
Apr 2019

Dzięki. Dzisiaj, nie licząc poprawienia na duże litery(co zrobiłem zresztą wcześniej) zaliczyło.

8 days later

Cześć.

Czy ktoś podpowie co złego jest w tym kodzie ?

Nie dostaje akceptacji.

Odpowiedź dla każdej liczby musisz podawać w nowej linii

Dodam jeszcze, że dzielenie nie trzeba wykonywać do n-1 tylko do pierwiastka z n. Na sam wynik to nie wpłynie, ale wpłynie na czas wykonania. Po wpisywaniu wyniku do nowej linii spoje akceptuje kod. Gdy już będzie działało usuń link do kodu.

Cześć,
mam problem i cały czas otrzymuję błąd kompilacji. Piszę w C#, w Visual Studio
Co robię źle?

Nie możesz definiować funkcji wewnątrz innej funkcji. Przesuń ją poza main.

Wyrzuciłem boola poza main, do tego poprawiłem pętlę for i błąd, przez który 0 i 1 były uznawane za liczby pierwsze.
Jednak dalej nie przyjmuje, tym razem jest to błędna odpowiedź.

a czy zdarza ci się testować program, choćby czasami ?
bo warto :slight_smile: - choćby dla danych podanych w zadaniu

Tak, zawszę testuję. W visual studio program bez problemu działa i wyświetla poprawnie tak dla liczb pierwszych i nie dla liczb niebędących pierwszymi. Natomiast tutaj za każdym razem występuje problem

nie rozumiesz treści zadania i nie rozumiesz, co piszę
czy naprawdę dla danych testowych z zadania masz taki wynik, jak podano ?
a generalnie, to należy testować w środowisku podobnym do tego, w jakim działa spoj - czyli na ideone.com, a jeżeli już na vs, to z przekierowanym wejściem/wyjściem

@general_iceman przeczytaj jeszcze raz treść zadania:

Input
n - liczba testów n<100000, w kolejnych liniach n liczb z przedziału [1…10000]

Teraz przyjrzyj się przykładowemu wejściu i SPRAWDŹ swoje wyniki

Input:
3
11
1
4
Output:
TAK
NIE
NIE

Poza tym w funkcji Pierwsza(x) powinieneś rozpatrywać przypadek 0 i 1. W funkcji Main będziesz mógłbyś uprościć kod do takiej konstrukcji:

if (Pierwsza(x)) {...}
else {...}

Dziękuję za pomoc, rzeczywiście źle odniosłem się do treści, po poprawieniu zaliczyło. Dodatkowo zrobiłem porządek w kodzie zostawiając w main jedynie pobieranie liczb do sprawdzenia i wyświetlanie, a całość sprawdzania przeniosłem do bool

Witam, jestem nowym użytkownikiem i świeżym “programistą”. Uczę się Javy od kliku dni Mam problem z tym zadaniem. W domu wszystko hula jak należy, ale na serwerze wyrzuca błąd NZEC. Czy ktoś wie gdzie mam błąd? Mój kod wygląda tak:

import java.util.;
import java.lang.
;

class Main
{
public static void main (String[] args) throws java.lang.Exception
{
Scanner scanner = new Scanner(System.in);

    for(int i = 0; i < 100000; i++){
    System.out.println("Podaj liczbę:");
    int liczba = scanner.nextInt();
    int k = 0;
    
    for(int j = 1; j < liczba; j++)
    if(liczba%j == 0)
    k++;
    
    if(k>1)
    System.out.println("NIE");
    else
    System.out.println("TAK");
    }
}

}

Przeczytaj uważnie treść zadania. JEDYNE co masz wypisywać to: TAK lub NIE. Poza tym…

  1. Nie znam jawy ale nie widzę wczytywanie liczby testów.
  2. Nie ma potrzeby dzielenia modulo aż do liczba-1. W zupełności wystarczy do pierwiastka z liczby

Moje wskazówki:

  1. Niepotrzebnie wypisujesz "Podaj liczbę: ". Kod sprawdzany jest automatycznie i musisz dostosować się do
    formatu we/wy opisanego w zadaniu, bo inaczej dostaniesz WA.
  2. Nie wczytujesz liczby określającej liczbę przypadków testowych - musisz ją wczytać a potem uruchomić pętlę dla
    testów. Ty wykonujesz tę pętlę zawsze 100000 razy.
  3. Wystarczy sprawdzać dzielniki od 2 do pierwiastka z n. (int j = 2; j*j <= n; j++). Gdy tylko znajdziesz dzielnik możesz
    opuścić tę pętlę, bo liczba będzie złożona.
  4. Musisz rozważyć sytuację gdy liczba to 0 lub 1 - bo to nie są liczby pierwsze.

Powyższe wskazówki pozwolą Ci na uzyskanie AC. A oto bardziej ogólne porady:

  1. Najoptymalniejszym sposobem na to zadanie jest sito Erastotenesa - jak już pouczysz się trochę to proponuję
    powrócić do tego zadania i zaliczyć je tym algorytmem.
  2. Swój kod przekazuj w formie linku do ideone.com1. Możesz tam wklejać input i testować swój kod.
    Staraj się też poprawić czytelność kodu.
  3. Java ma bardzo wolne I/O. Są dużo lepsze sposoby organizacji I/O - poszukaj na przyszłość.
  4. To zadanie wcale nie jest najłatwiejsze z kategorii łatwych. Poniżej masz linki do kilku bardzo prostych, żebyś mógł
    się oswoić:
    https://pl.spoj.com/problems/PTEST/6
    https://pl.spoj.com/problems/POTSAM/4
    https://pl.spoj.com/problems/MWPZ06X/3
    https://pl.spoj.com/problems/VSR/4

Hmm… Zadanie ze średnią jest bardzo proste z punktu widzenia napisanego kodu, ale jeśli dla kogoś kto ma problemy z fizyką (a takich jest wielu) to zadanie nie musi być bardzo łatwe :slight_smile:

Ale sprawdziłem że kolega blackfoo ma jako instytucje wpisany Uniwersytet Warszawski, więc zakładam, że powinien
sobie poradzić

Dzięki wielkie za odpowiedzi i cenne rady :slight_smile: Faktycznie, muszę zwrócić większa uwagę na treść zadania. Kiedyś liznąłem 1 semestr C++, ale było to dawno i wszystko zapomniałem. Teraz studiuje na Wojskowej Akademii Technicznej (ang. Warsaw Univeristy of Technology), tylko ucięło końcówkę.

9 days later

Witam Czy jest jakaś dobra dusza która programuje w Jave i wyjaśni mi co w moim kodzie nie działa ? Programuje od kilku dni i brakuje mi doświadczenia dlatego zgłaszam się do mądrzejszych :smiley:

import java.util.Scanner;

public class LIczbyPierwsze {

public static void main(String[] args) {


    int b = 1;
    int c = 0;

    Scanner lPierwsza = new Scanner(System.in) ;
    int a = lPierwsza.nextInt();

    int g = a+1;
    for ( int i =1;i<g;i++)
    {
        if (a%i==0){
          c = b++ ;
        }
    }

    if (c==2){
        System.out.println("TAK");
    }else{
        System.out.println("NIE");
    }


}

}