kod4 Panowie i Panie działa niby ale nie wiem czy brakuje zakresu?
cześć, czy moglibyście spojrzeć na mój kod i powiedzieć co jest nie tak?
Sam próbowałem to rozgryźć, razem z zestawem liczb pierwszych, ale nie znalazłem przyczyny. Wiem, że w jednym punkcie mój algorytm jest skopany bo do liczby 4 musiałem dać osobną obsługę, ale potem jak testowałem to wszystko mi działało.
z góry dzięki za naprowadzenie
EDIT:
Problem rozwiązany, wprowadziłem kilka poprawek, ale sędzia przepuścił mnie kiedy zmieniłem nazwę zmiennej numberOfTests na n. Zakładam, że nie mógł przez to przeprowadzić żadnego testu i od razu wyrzucał błąd
Nie zakładaj! To jest totalna bzdura. Wprowadziłeś, jak sam piszesz, kilka poprawek i to one spowodowały AC a nie zmiana nazwy zmiennej. Po prostu naucz się pożądnie testować swoje programy, tewstowanie na konsoli [w środku nocy ;-)] nie zawsze, a nawet najczęściej może być bardzo zwodnicze. Wystarczyło wpisać [wkleić] przykład do okienka stdin na ideone i już byś od razu wiedział gdzie masz błąd. Ideon to coś dużo więcej niż pastebin do pokazywania tylko swojego kodu.
PS
Oczywiście ja widzę te dwa błedy jak by co, no i twój kod jest AC ale nie znaczy, że doskonały.
@narbej
Zdaję sobie sprawę, że algorytm jest póki co dość kiepski, ale zmiany jakie wprowadziłem były raczej kosmetyczne (zamiast drukować TAK lub NIE, stworzyłem stringa który przyjmował wartości i jego drukowałem), poza tym po każdej poprawce wysyłałem do sędziego i zaliczył mi to dopiero po zmianie nazwy zmiennej.
Pozdrawiam i dzięki za rady na przyszłość
Jednak nie skorzystałeś z mojej rady Zobacz sam, twój [pierwszy] kod na ideone z testem z zadania: https://ideone.com/2rFqK211 . Więc jak sam widzisz, [czy aby na pewno to widzisz?] wystarczyło tylko dodać dwa brakujące endl, a zmienną [jej nazwę] zostawić w spokoju
#include <iostream>
using namespace std;
int main()
{
int n,liczba,w;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>liczba;
if(liczba==1)
{
cout<<"NIE"<<endl;
}
else
{
for(int j=liczba-1;j!=1;j--)
{
w=liczba%j;
if(w==0)
{
cout<<"NIE"<<endl;
break;
}
}
if(w!=0)
{
cout<<"TAK"<<endl;
}
}
}
return 0;
}
Czemu nie działa? POMOCY!
czy to trudno przeczytać wątek, i zobaczyć jak przekazać kod przez ideone.com2 lub jak wkleić poprawnie kod, aby nie ginęło formatowanie i nie znikały fragmenty tekstu ?
sprawdź działanie twojego programu dla danych:
5
1
2
3
4
2
Witam - czy może ktoś sprawdzić mój kod? Wydaje mi się, że wszystko jest dobrze, testowałem dla wielu damych i zawsze pokazuje prawidłowy wynik i już nie mam bladego pojęcia dlaczego sędzia odrzuca mi rozwiązanie z komentarzem, że jest błędne rozwiązanie. Może to jest jakiś drobny błąd którego nie dostrzegam dlatego postawnowiłem napisać.
Oto mój kod:
Dzięki Mariusz, jeśli chodzi o 100000 to zwiększyłem zasięg zmiennej do 100001, natomiast nie do końca rozumiem dlaczego n ma być od 1 - jest to specjalny przypadek, którego zazwyczaj nie bierze się pod uwagę przy sprawdzaniu liczb pierwszych bo nie jest ona piersza czy chodzi tutaj o stworzenie specjalnego przypadku, że jeśli n = 1 to wypisać na ekran, że liczba nie jest pierwsza? coś jak z 2?
Poprawiłem jeszcze kod i teraz działa poprawnie dla tych danych, które napisałeś.
Potem się pobawię w optymalizację tego bo wiem, że na pewno można to zkrócić, ale póki co chciałbym, żeby to w ogóle zadziałało… Teraz wydaje mi się, że wszystki warunki są uwzględnione. Dla tych danych co mi napisałeś czyli:
5
1
2
3
4
10000
Zwraca poprawbe wyniki czyli:
NIE
TAK
NIE
NIE
NIE
W tym przypadku może to wystarczyć, ale ogólna zasada nakazuje zakładać, że limity w zadaniach są błędnie zaniżane - można dać nawet 200000 i dopiero mając prawidłowy limit schodzić ze stałymi chcąc np wyśrubować czas wykonania.
Oczywiście im nowsze lub bardziej popularne zadanie tym bardziej zgodny z rzeczywistością jest opis, a jedynie kilka zadań to tak zwane perełki więc niniejsze zalecenie jest nieco na wyrost, ale osobiście jestem jego zwolennikiem bo pośrednio ułatwia wiele rzeczy np. debugowanie dla dużych testów albo analizę czasu wykonania.
Wracając do poprzedniego punktu - a jeżeli liczba testów będzie większa to co? Nic nie wyświetlisz? A jeżeli będzie mniejsza to co? Za każdym razem wywołasz ifa wiedząc, że zawsze będzie test < 100000? Po co Ci zatem taka instrukcja?
To samo dotyczy warunku dla n.
1 nie jest liczbą pierwszą i nie wiem dlaczego miałoby się ją pomijać. 2 jest liczbą pierwszą. I tak - program powinien móc podołać tym liczbom, co sugeruje nie tylko treść i test Mariusza, ale też przykładowy output do zadania. Z resztą zostałem uprzedzony