60 / 277
Mar 2017

Dziękuję za zainteresowanie moim problemem. Nie przypuszczałem, iż wielkość liter przy wyjściu ma znaczenie. Cenna informacja na przyszłość. Raz jeszcze wielkie dzięki za pomoc. Pozdrawiam.

Nie ma najmniejszego znaczenia, pod warunkiem że jest dokładnie taka sama jaką zażyczył sobie autor zadania.

Witam, czy mógłby ktoś podpowiedzieć co jest nie tak w moim rozwiązaniu? Dla danych wejściowych podanych w zadaniu mój program działa, jednak dla danych wejściowy tj. 1111 , 3333, 5555 czy 9999 podaje błędną odpowiedź.

http://pl.spoj.com/files/src/19026801/11

kod na spoju jest widoczny tylko dla właściciela i autora zadania.

wskazane jest podawanie kodu zadania poprzez umieszczenie na ideone.com3 i podanie linku

jeżeli znasz dane, dla których działa źle, to w zasadzie jest to już tylko twój problem - ja z zasady ograniczam się do podania danych dla których program źle działa

twój program nawet dla danych:
1
9
daje zły wynik- https://ideone.com/JAh5LD13

zrobiłeś błąd w funkcji czy_pierwsza.
W tym miejscu:

if (n%i==0)
return false ;
else return true ;

usuń else i powinno działać

PS Twój program sprawdza czy liczba jest pierwsza poprzez sprawdzanie z każdą liczbą całkowitą. Zastanów się jak by to skrócić

include

using namespace std;

int main(int argc, char** argv) {
int p,l;
cin>>p;
for(int i=1;i<=p;i++){
cin>>l;
if(l==2||l==3||l==5||l==7) cout<<"TAK"<<endl;
else if(l==1) cout<<"NIE"<<endl;
else if(l!=2&&l!=3&&l!=5&&l!=7){
if(l%2==0||l%3==0||l%5==0||l%7==0) cout<<"NIE"<<endl;
else cout<<"TAK"<<endl;
}
if(l==2||l==3||l==5||l==7) cout<<"TAK"<<endl;
}
return 0;
}

Możecie mi powiedziec co tu jest nie tak?

Mnie tu się nic nie podoba, a już szczególnie algorytm. Zacznij od sprawdzenia czym są liczby pierwsze. Wypisz sobie ich z 20 i spróbuj wydedukować dlaczego Twoje podejście jest błędne.

Ja natomiast zalecam wklejać kod w taki sposób, żeby dało się go analizować. Powyższy kod nie zachęca do szukania błędu w algorytmie.

a ja zalecam nieużywanie jako nazwy zmiennej litery 'l' - ze względu na to, że często trudną ją odróżnić od innych znaków.

Dzięki za dobre rady dopiero zacząłem programować i spróbuje stosować się do waszych rad w przyszłych programach a program spróbuje napisać na inny sposób.

Cześć,
ja również walczę z tym zadaniem.w języku C++
Mój kod to:

#include <iostream>
using namespace std;

float liczba[3];
int ile;

bool czy_pierwsza(int n)
{
	if (n<2)
		return false; //gdy liczba jest mniejsza niż 2 to nie jest pierwszą

	for (int i = 2; i*i <= n; i++)
		if (n%i == 0)
			return false; //gdy znajdziemy dzielnik, to dana liczba nie jest pierwsza
	return true;
}


int main()
{
	int ile;
	cin >> ile;
	for (int i=0;i<ile;i++)
	{
		cin >> liczba[i];
		if (czy_pierwsza(liczba[i]) && liczba[i] <2)
		{
			cout << "TAK" << endl;

		}
		else cout << "NIE" << endl;
	}
	
	system("PAUSE");
	return 0;
}

sędzia wyrzuca mi :błąd wykonania (SIGSEGV), Podejrzewam, że chodzi o przedział n<1000000 ale pewności nie mam. Z góry dziękuje za wszelkie sugestie.

Chciałem łatwo zmieniać zmienne w pętli for.

Poprawiłem lekko kod i przeszło: usunąłem niepotrzebną tablice oraz w if (czy_pierwsza(liczba[i]) && liczba[i] <2) usunąłem drugi warunek.

to teraz usuń cały kod

tablica miała zły rozmiar, tylko 3 elementy

1 month later

kod:

#include <iostream>
using namespace std;

long int n;

bool czy_pierwsza(long int liczba){
    if(liczba < 2) return false;

    for(int i=2;i<(liczba/2);i++)
        if(liczba % i == 0) return false;

    return true;
}

int main()
{
    long int liczby[10000];
    cin>>n;

        for(int i=0;i<n;i++){
            cin>>liczby[i];
        }
    cout<<endl;

    for(int i=0;i<n;i++){
        if(czy_pierwsza(liczby[i]) == true) cout<<"TAK"<<endl;
        else cout<<"NIE"<<endl;
    }

    return 0;
}

otóż wrzucam te rozwiązanie do pierwszego zadania LICZBY PIERWSZE z łatwego działu, wybieram każdy z możliwych kompilatorów i za każdym razem "BŁĄD ODCZYTU". Co nie tak?

Pierwszy raz spotykam się z takim komunikatem na spoj.
Próbowałeś wrzucać samo main ?( bez żadnego kodu ) Albo testować na ideone ?

Przy twoim zadaniu jest komunikat błąd wykonania (SIGSEGV) (a nie błąd odczytu)