160 / 277
Jul 2018

Twój kod6 dla danych z zadania wyświetla:

TAK

NIE

NIE

A wydaje się, że powinien wyświetlać:

TAK
NIE
NIE

Widzisz różnicę?

To nie to - w tym zadaniu nie ma sędziego dokładnego.

Test:

8
5
5
5
4
4
4
5
4

Fakt, wbijały mi się w oczy te entery i uznałem, że to pewnie jedyny błąd. :slight_smile:

12 days later

Ktoś wie co tu jest źle? Czy możę nie o to chodzi w tym zadaniu?

#include

using namespace std;

int main()
{
int n;
while (cin >> n)
if (((n%2==0)&&(n>2))||((n%3==0)&&(n>3))||((n%5==0)&&(n>5))||((n%7==0)&&(n>7)))
cout << “NIE” << endl;
else cout << “TAK” << endl;
return 0;
}

skoro znalazłeś właściwy wątek, to szkoda,że go poprzednio nie przeczytałeś

więc zrób to teraz, a ja w zamian nie napiszę co myślę o twoim programie

Napewno, ale tu nie o to chodzi, chodzi o to abyś w miarę możliwości sam znalazł błąd.

Dokładnie tak, chodzi niby o to ale nie zupełnie tak. Dlatego warto wrócić do treści zadania i dokładnie je przestudiować, łącznie z przykładem. Możliwe, że studiowanie, to w tym wypadku za duże słowo, w końcu tam są tylko trzy zdania i jeden przykład, więc tym bardziej warto to - przeczytać i przemyśleć - , zrobić bardzo powoli, dokładnie i ze zrozumieniem.

Gdybyś uważał, że trzy zdania, to za mało, tutaj --> http://discuss.spoj.com/search?q=“liczby%20pierwsze”10 znajdziesz więcej do poczytania i “studiowania”. :wink:

2 months later

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.