161 / 277
Oct 2018

Witam
Program kompiluje się poprawnie.
Spoj jednakże odrzuca odpowiedzi.


Czy byłby ktoś w stanie znaleźć przyczynę odrzucania tego kodu?

Nie uwzględniałem 0 i 1. SPOJ przyjął rozwiązanie.
Nie było tematu, sorry za zamieszanie.

Czy ktoś jest w stanie mi wytłumaczyć mój błąd? W sensie wskazać, rozwiązanie pewnie znajdę jak będę znał przyczynę.

ten problem był już kilkakrotnie omawiany (choć nie mam pewności, czy w tym wątku)
przeczytaj cały wątek i inne poświęcone temu zadaniu a na pewno znajdziesz odpowiedź

5 months later

Powie mi ktoś czemu sędzia nie zalicza mi tego programu? Przecież działa on dobrze…

`#include

using namespace std;

bool isPrime (int n)
{
if (n<2)
return false;

for (int i = 2; i*i <= n; i++)
{
    if (n%i == 0)
    {
        return false;
    }
    return true;
}

}

int main()
{
int n, testy;
cin >> testy;
int tab[testy];
for (int i=0; i < testy; i++)
{
cin >> n;
tab[i] = n;

}
for (int i = 0; i < testy; i++)
{
    isPrime(tab[i]) ? cout << "TAK\n" : cout << "NIE\n";
}
return 0;

}
`

#include <iostream>

using namespace std;

bool isPrime (int n)
{
if (n<2)
return false;

for (int i = 2; i*i <= n; i++)
{
    if (n%i == 0)
    {
        return false;
    }
    return true;
}

}

int main()
{
int n, testy;
cin >> testy;
int tab[testy];
for (int i=0; i < testy; i++)
{
cin >> n;
tab[i] = n;

}
for (int i = 0; i < testy; i++)
{
    isPrime(tab[i]) ? cout << "TAK\n" : cout << "NIE\n";
}
return 0;

}

Czemu sędzia nie zalicza tego programu? Przecież działa on poprawnie.

A czemu Twój program wypisuje “TAK” np. dla liczby 9?

@jokerekv2 powinieneś zwracać wartość true po opuszczeniu pętli. Inaczej wynik funkcji jest niepoprawny.
PS. Nie używaj VLA.

Jakie zadanie masz na myśli z tą pętlą?
Co to jest VLA?

@hipcia Faktycznie… byłem pewien, że return true znajduje się poza pętlą. Kompletnie tego nie zauważyłem. Dzięki wielkie… teraz śmiga i sędzia zaliczył.
@eksekk Błąd naprawiony.

Witam
Nie moge zaliczyc tego zadania
Prosilbym o wskzowki :slight_smile:
Sprawdzalem duzo liczb i wyskakiwalo mi prawidlowo.

#include

using namespace std;

int main()
{
int liczba;

cin>>liczba;

if (liczba<2) {cout<<“NIE”;}
if (liczba==2) {cout<<“TAK”;}
if(liczba%2==1) {cout<<“TAK”;}
else {cout<<“NIE”;}

return 0;

}

  1. Gdy podajesz kod podawaj go najlepiej jako link do Ideone. To jak to podałeś jest bardzo nieczytelne
  2. Twój program nawet nie wczytuje poprawnie danych wejściowych podanych tak jak jest to w treści zadania.
    Przeczytaj dokładnie jak powinno to wyglądać i zrób to na Ideone
  3. Twój kod je niepoprawny. Powiedz jakie wyniki dostaniesz dla 25 35 itp? Będzie, że TAK a to przecież nie są liczby pierwsze

https://ideone.com/YxRsBN30

Witam,
Proszę o pomoc, dlaczego sędzia zwraca błędną odpowiedź.

Program po uruchomieniu i wpisaniu
3
11
1
4
zwraca:
TAK
NIE
NIE

Pozostałe wartości liczb, myślę, że dla każdej kombinacji sprawdzi dobrze.
Gdzie popełniłem błąd. Wiem, że nie jest to szybkie rozwiązanie, ale czy jest błędne?

Z góry dzięki za pomoc,

Dlaczego nie podałeś jaki rodzaj błędu podaje sędzia?

  1. Widać, że na pewno masz problem z rozmiarem tablicy. Przyjmuje ci tylko 9 999 testów (tablica w C++ indeksuje się od 0), bo wpisywać zaczynasz od indeksu 1. W warunkach zadania jest napisane, że testów może być do 100 000.
  2. Po co w ogóle używasz tablicy. Przecież nigdzie tu nie jest potrzebna.
  3. To niedobra praktyka nadużywać zmiennych globalnych, tutaj tez nie są potrzebne.
  4. Myślę, że jak się trochę przyłożysz to napiszesz trochę czytelniejszy kod :slight_smile:

Dzięki!
Po wpisaniu do tablicy [100000] i indeksowaniu od i=0 --> zaakceptowane.
Czas 0.14
MEM 3.1M

Jutro popracuje nad czytelniejszym kodem bez użycia tablic - dopiero mój 3 dzień przygody z programowaniem :slight_smile: