• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Liczby Pierwsze SPOJ C++

Object Storage Arubacloud
0 głosów
1,009 wizyt
pytanie zadane 4 maja 2019 w SPOJ przez Psz3mo Mądrala (5,030 p.)
zmienione kategorie 4 maja 2019 przez ScriptyChris

Mam problem gdy daję ten kod do sedziego na SPOJ wypisuje mi że błedna odpowiedź nie wiem w czym tkwi problem proszę o pomoc.

#include <iostream>
using namespace std;

int main()
{
    int n,l[99999],a;
    cin>>n;
    for(a=1;a<=n;a++)
    cin>>l[a-1];
        for(a=1;a<=n;a++)
        {
            if((l[a-1] % 2 == 0) && (l[a-1] % 4 == 0)||(l[a-1]==1))
                cout<<"NIE"<<endl;
            else
                cout<<"TAK"<<endl;
        }
   return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 4 maja 2019 przez RafalS VIP (122,820 p.)
Nie potrzebujesz kodu sędziego, bo Twój program nie ma prawa działać. Sprawdzasz podzielność przez 2 i 4 co z całą resztą liczb?

Np nie zgadza się dla liczby 9.

Jak to naprawić? Trzeba sprawdzić wszystkie liczby od 2 do sqrt(n)
komentarz 4 maja 2019 przez Psz3mo Mądrala (5,030 p.)
Aaa Dobra dzięki zapomniałem o tym
komentarz 4 maja 2019 przez Psz3mo Mądrala (5,030 p.)

Poprawiłem kod i dalej błedna odpowiedz. To co zmieniłem:

for(a=1;a<=n;a++)
        {
            if(l[a-1]<2)
                cout<<"NIE"<<endl;
            else
            {
                for(int k=2;k<l[a-1];k++)
                {
                    r=l[a-1]%k;
                    if(r==0)
                        {cout<<"NIE"<<endl; break;}
                }
            if(r!=0)
                cout<<"TAK"<<endl;
            }
        }

 

komentarz 4 maja 2019 przez KubixPL Użytkownik (500 p.)

1.Odpowiedź jest błędna, ponieważ twój program nie zwraca poprawnego wyniku dla liczby 2. Dzieje się tak, bo pętla z linii 7 nie wykonuje się (2<2 to fałsz). Program przechodzi dalej i sprawdza if'a z linii 13 "czy r!=0", nie widać tutaj deklaracji r ale sądzę, że zadeklarowałeś je bez przydzielania wartości a zatem domyślna wartość r=0 więc ten if nie wykona się. Program nie zwraca żadnego wyniku (ani "TAK" ani "NIE"), lecz działa dalej i pobiera kolejne liczby do tablicy.  Aby rozwiązać ten problem najlepiej przed else (linia 5) wstawić if'a: 

else if (l[a-1]==2)
            {
             cout<<"TAK"<<endl;
            }

Wtedy program zwróci poprawny wynik dla 2 a dla innych liczb będzie wykonywał pętle.

2.Po co a-1 zamiast przydzielić odrazu a=0? Kod wyglądał by lepiej, a to i tak nic nie zmienia w wykonaniu kodu (a=0 więc tab[a]=tab[0]).

3.Umiesz już dynamicznie alokować pamięć? Jeśli nie, to taki zapis "l[9999]" przejdzie, jednak polecam ci odcinek o wskaźnikach.

Podobne pytania

0 głosów
0 odpowiedzi 376 wizyt
pytanie zadane 2 stycznia 2020 w SPOJ przez Bezk Nowicjusz (140 p.)
0 głosów
2 odpowiedzi 575 wizyt
pytanie zadane 1 lipca 2018 w SPOJ przez Fernokip Nowicjusz (180 p.)
0 głosów
2 odpowiedzi 432 wizyt
pytanie zadane 30 lipca 2019 w SPOJ przez wjacoszek2000 Początkujący (290 p.)

92,568 zapytań

141,420 odpowiedzi

319,618 komentarzy

61,954 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...