nikusek007 Temat założony przez niniejszego użytkownika |
Wysypywanie programu dla dużych liczb » 2017-03-12 13:36:44 Witam! Pisałem program, którego zadaniem było wypisanie wszystkich liczb mniejszych równych od liczby wczytanej w taki sposób, żeby żadne liczby obok siebie nie różniły się o 1 Np. wczytane - 4 wypisuje - 2 4 0 3 1 Próbowałem do tego podejść na dwa sposoby, lecz dla obu program wysypuje się dla liczb większych od 520590, a dziedziną liczby wpisanej jest 0<=n<=10^6. Próbowałem stosować "unsigned" itd ale nie zmieniło się to ani trochę. KODY: #include <iostream>
using namespace std;
int main() { int a, d = 1; cin >> a; int b[ a + 1 ]; if( a == 0 ) cout << 0; else if( a < 3 ) cout << "NIE"; else if( a == 3 ) cout << 2 << " " << 0 << " " << 3 << " " << 1; else { for( int i = 0; i <= a; i++ ) b[ i ] = i; if((( a + 1 ) % 3 == 0 ) &&(( a + 1 ) % 5 == 0 ) ) { for( int j = 0; j <= a; j++ ) { cout << " " << b[ d %( a + 1 ) ]; d = d + 4; } } else if(( a + 1 ) % 3 == 0 ) { for( int j = 0; j <= a; j++ ) { cout << " " << b[ d %( a + 1 ) ]; d = d + 5; } } else { for( int j = 0; j <= a; j++ ) { cout << " " << b[ d %( a + 1 ) ]; d = d + 3; } } } return 0; _______________________________________________________________________ #include <iostream>
using namespace std;
int main() { int a, d = 1; cin >> a; int b[ a + 1 ]; if( a == 0 ) cout << 0; else if( a < 3 ) cout << "NIE"; else if( a == 3 ) cout << 2 << " " << 0 << " " << 3 << " " << 1; else { for( int i = 0; i <= a; i++ ) b[ i ] = i; while( d < a ) { cout << " " << b[ d ]; d = d + 2; } d = 0; while( d < a ) { cout << " " << b[ d ]; d = d + 2; } } return 0; }
|
|
carlosmay |
» 2017-03-12 13:42:59 Kończy ci się pamięć stosu i wywala aplikację. W tej sytuacji musisz dynamicznie przydzielić pamięć dla tablicy. Takie deklarowanie tablicy jest niezgodne ze standardem C++. Rozmiar tablicy musi być znany w czasie kompilacji (innymi słowy, musi być constexpr ). edit: Zamiast literek stosuj opisowe nazwy zmiennych. Stosuj klamry nawet dla pojedynczej instrukcji w pętli, czy instrukcji warunkowej itd. |
|
nikusek007 Temat założony przez niniejszego użytkownika |
» 2017-03-12 13:48:59 Okkkejj...no to jeszcze chyba trochę nauki przede mną. Do programu więc wrócę za jakiś czas, jak już wiedza teorytyczna będzie troszkę większa. Dziękuję za odpowiedź! ;) |
|
carlosmay |
» 2017-03-12 13:49:57 |
|
nikusek007 Temat założony przez niniejszego użytkownika |
» 2017-03-12 13:58:48 No i zabieramy się do zabawy. Dziękuję Ci jeszcze raz! ;) |
|
pekfos |
» 2017-03-12 14:14:47 Po co ta tablica? for( int i = 0; i <= a; i++ ) b[ i ] = i; |
Indeks tablicy jest równy wartości. Masz już potrzebną wartość, ale mimo to chcesz ją obliczyć marnując przy tym czas i pamięć. Czy przypadkiem nie powinieneś oszczędzać tych zasobów, pisząc zadanie na SPOJa..? |
|
nikusek007 Temat założony przez niniejszego użytkownika |
» 2017-03-12 14:51:37 OK program przestało wywalać po zastosowaniu vectora
Wspominano mi już o tym problemie, lecz nie miałem pomysłu w jaki sposób to inaczej zastosować, ponieważ po ominięciu tego elementu program zupełnie mi nie chciał działać :/
SPOJ niestety nie zaakceptował ani jednego, ani drugiego kodu. Problemem mogą być spacje między nimi, lecz nie wiem w jaki sposób to zrobić, żeby "na zewnątrz liczb" (|<->2 4 0 3 1<->|) nie było spacji. EDIT: Problemem nie są spacje, ponieważ wypisałem pierwszy wyraz przed pętlą, tak, że już nie powinno być spacji "na zewnątrz", a dalej nie działa :/ EDIT 2: Problemem były spacje i warunek w while'u. Zaakceptowało! :D Dziękuję, przynajmniej poznałem też vectory! Teraz już nic mnie nie powinno powstrzymać przed zarobieniem pierwszego miliona! |
|
pekfos |
» 2017-03-12 15:00:05 wypisanie wszystkich liczb mniejszych równych od liczby wczytanej w taki sposób, żeby żadne liczby obok siebie nie różniły się o 1 |
Jakoś nie wierzę, że tak brzmi treść tego zadania. Możesz podać, co dokładnie masz zrobić? |
|
« 1 » 2 |