SPOJ- liczby pierwsze
Ostatnio zmodyfikowano 2016-05-18 18:48
sparklemo7ion Temat założony przez niniejszego użytkownika |
SPOJ- liczby pierwsze » 2016-05-14 16:19:38 Siemanko, mam problem z zadaniem w SPOJ a mianowicie z liczbami pierwszymi, link -> http://pl.spoj.com/problems/PRIME_T/ Kod: #include <iostream> using namespace std;
int main() { int ile_liczb; int pierwsza; cin >> ile_liczb; int liczby[ ile_liczb ]; for( int a = 0; a < ile_liczb; a++ ) { bool pierwsza = true; cin >> liczby[ a ]; if( liczby[ a ] == 1 || liczby[ a ] == 0 ) { cout << "NIE!" << endl; pierwsza = false; continue; } for( int i = 2; i < liczby[ a ]; i++ ) { if( liczby[ a ] % i == 0 ) { cout << "NIE!" << endl; pierwsza = false; break; } } if( pierwsza == true ) cout << "TAK!" << endl; } return 0; }
Test mi wyszedł tak jak ma być. Wszystkich liczb nie sprawdzę co prawda ale kilka razy testowalem i wszystkie wyniki były ok, a kompilator na SPOJu wywala błąd: "Błędna odpowiedź" co tu jest nie tak? Wiem, że możnaby to było pewnie napisać w kilku linijkach no ale na razie moje 'umiejętności' pozwalają mi tylko na to :P |
|
mateczek |
» 2016-05-14 16:38:50 1 nie ładuj w tablicę bo i po co. Sprawdzaj liczbę na bieżąco czy pierwsza!!! 2 sprawdzanie czy pierwsza ogranicz zakres for( int i = 2; i < liczby[ a ]; i++ )
cin >> liczba;
for( int i = 2; i < sqrt( liczba ); i++ ) { }
|
|
sparklemo7ion Temat założony przez niniejszego użytkownika |
» 2016-05-14 19:15:20 No rzeczywiście z poprzednim kodem nie zmieściłem się w czasie :P Napisałeś, że tablicuję w zły sposob i tablice dynamiczne na stosie to zły pomysł. Mógłbyś wytłumaczyć, dlaczego robię to w zły sposób i co to w tym przypadku jest ten "stos"? Poprawka: #include <iostream> #include <math.h> using namespace std;
int main() { int ile_liczb, liczba; int pierwsza; cin >> ile_liczb; for( int a = 0; a < ile_liczb; a++ ) { bool pierwsza = true; cin >> liczba; if( liczba == 1 ) { cout << "NIE!" << endl; pierwsza = false; continue; } for( int i = 2; i <= sqrt( liczba ); i++ ) { if( liczba % i == 0 ) { cout << "NIE!" << endl; pierwsza = false; break; } } if( pierwsza == true ) cout << "TAK!" << endl; } return 0; }
Czas już dobry, ale kompilator wywalił ten sam błąd co wcześniej :/ |
|
pekfos |
» 2016-05-14 19:22:09 Czas już dobry, ale kompilator wywalił ten sam błąd co wcześniej :/ |
O jaki czas chodzi, skoro program się nie kompiluje..? |
|
sparklemo7ion Temat założony przez niniejszego użytkownika |
» 2016-05-14 20:16:05 "Limit czasu wykonania programu: 5s". Program się zapewne skompilował, ale SPOJ poinformował o błędnej odpowiedzi. Test wychodzi tak jak ma być. |
|
mateczek |
» 2016-05-14 20:21:54 a wykrzykniki po "NIE" I "TAK" to skąd Ci się wzieły ?? dlaczego je wstawiłeś ?? |
|
sparklemo7ion Temat założony przez niniejszego użytkownika |
» 2016-05-14 20:50:40 <facepalm> Czemu te wykrzykniki tak siedziały w mojej głowie to nie mam pojęcia.. Bez wykrzykników podziałało. Ale i tak wielkie dzięki bo pierwszy kod który tu wstawiłem i tak by nie przeszedł ze względu na zbyt duży czas wykonania :P |
|
mateczek |
» 2016-05-14 21:15:54 Napisałeś, że tablicuję w zły sposób i tablice dynamiczne na stosie to zły pomysł.
|
bo nie znasz rozmiaru tablicy w czasie kompilacji i możesz przepełnić stos programu uszkodzić inne zmienne ogólnie wysypać program |
|
« 1 » 2 |