1 / 6
Jul 2017

Witam.
Jestem świerzakiem jeżeli chodzi o c++, w zasadzie to moje pierwsze zadanie na tej stronie pomijając te sprawdzające. Mam problem jeżeli chodzi o zadanie odnośnie liczb pierwszych (na komputerze działa, jednak strona nie przyjmuje zadania). Wklejam kod i liczę na jakieś uwagi.
EDIT: Czy chodzi o to, że program przekracza czas działania, ponieważ liczby wpisuję kolejno dopiero w pętli?
EDIT2:Teraz wychodzi już identycznie jak w programie, jednak dalej nie zalicza.

include

int n;
cin>>n;
int *liczba;
liczba= new int[n];
for(int d=0;d<n;d++)
{
cin>>liczba[d];
}

for(int i=0; i<n; i++)
{
if(liczba[i]>=0)
{
if(liczba[i]==0||liczba[i]==1) cout<<"NIE"<<endl;
else if (liczba[i]==3|| liczba[i]==5|| liczba[i]==2||liczba[i]==7)
cout <<"TAK"<<endl;
else if (liczba[i]%2==0 || liczba[i]%3==0 || liczba[i]%5==0||liczba[i]%7==0)
cout <<"NIE"<<endl;
else
cout <<"TAK"<<endl;
 }
 else cout<<"NIE"<<endl;
 }
return 0;

}

  • created

    Jul '17
  • last reply

    Jul '17
  • 5

    replies

  • 1.0k

    views

  • 3

    users

  • 3

    likes

  • 2

    links

1) Po co Ci tablica dynamiczna ? Mógłbyś po prostu w pętli wczytywać po jednej liczbie i ją sprawdzać.
2) Nie usunąłeś tablicy dynamicznej. (delete [] liczba;) Jednakże nie to jest błędem.
3) Błędem są twoje warunki odnośnie liczby pierwszej.
Sprawdź co wypisuje twój program dla liczb 121, 169, 289
(121 = 11*11 -> nie jest liczbą pierwszą)

Kurcze, sam nie wiem co powiedzieć... czuję się troche jak jakiś wielbiciel teorii spiskowych, ale podobieństwo Twojego kodu i kodu @flimbo123 http://discuss.spoj.com/t/prime-t-liczby-pierwsze/15089/78 mnie powala :wink:

A teraz na poważnie: przeczytaj cały (CAŁY!) wątek który zalinkowałem i wszystko stanie się jasne. Uwagi @michal486 są słuszne. Rozwinę jednak jego skrót myślowy nim ktoś uzna, że jedno (więcej?) delete w te czy wewte to żadna różnica. Pozostawienie tablicy dynamicznej nie jest błędem w tym przypadku z punktu widzenia sędziego - mu to lotto. Natomiast jest to błąd w sztuce!

Dziękuję bardzo za pomoc.
Zmieniłem tablice dynamiczna na statyczną.
Po wielu bojach i przeczytaniu linku od Ciebie udało mi się spłodzić coś zupełnie nowego, jednak strona nie przyjmuje.
Pytanie czy jest to kwestia tego że liczby powinno się najpierw wpisać i dopiero później wyrzucić wszystkie na ekran, czy błąd w programie.
Wrzucam treść: http://ideone.com/NDAbuR4
PS Jeżeli chodzi o podobieństwo mojego pierwszego kodu do flimbo123 to masz racje tarpauwatratar, nie mogłem sobie dać rady z warunkiem dla liczb pierwszych i podpatrzyłem w komentarzach warunek, który na pierwszy rzut oka wydał się sensowny, więc postanowiłem celować w coś podobnego.

No to niestety zacząłeś przygodę na SPOJu od sparzenia się. Niestety, ale większość komentarzy pod popularnymi zadaniami jest nic warta :wink:

Nota bene ten warunek nie jest wcale sensowny, co wykazał @michal486 - łatwo jest podać przykłady sytuacji, gdy ta metoda zawiedzie.

Nie wczytuj danych do tablicy. Wczytuj liczba po liczbie i stwierdzaj, czy jest ona pierwsza czy też nie. to tak na przyszłość, ale w Twoim przypadku zalecam coś prostszego. Daj rozmiar tablicy int liczba[999999];. Z pewnych względów Twój kod nie jest warty pochwały, ale dostanie AC, a to chyba ważniejsze na start niż wykład na temat tablic w C++. Ściślej - jest za gorąco i mam za dużo roboty by naprowadzać Cię na sito... sam poszukasz jakie :wink:

Dzięki, faktycznie chodziło o to żeby program dopiero po wpisaniu wszystkich liczb ocenił które są pierwsze i jeżeli chodzi o drugi kod który wstawiłem w linku to już wszystko wygląda poprawnie.

Dzięki za pomoc Panowie, miłego dnia :slight_smile: