Witam. Zrobiłem to zadanie lecz SPOJ wyrzuca mi błąd SIGSEGV wiem że związany jest z tym że przekroczyłem dozwoloną pamięć, ale nie wiem jak to jeszcze bardziej uprościć. Na ideone kod działa. Link do kodu : http://ideone.com/8wS6nC37 Z góry dziękuje za pomoc.
- Jeżeli nie uzyskałeś AC, to trudno to nazwać zrobieniem zadania.
- WIem, że nic nie wiem? Błąd związany jest [w tym wypadku], że sam sobie podcinasz gałąź na której siedzisz. Możesz zadeklarować tablicę int wielkości dwieście tysięcy i program się skompiluje i uruchomi bez problemu i bez zgrzytów i jęczenia. Gdy jednak deklarujesz tablicę wielkości 25 elementów - skąd u licha wziąłeś taką wartość?, to nie dziw się, że program Ci się wywala z błędem SIGSEGV - tych liczb jest wielokrotnie więcej niż 25. Czy te upraszczanie, to użycie short zamiast int, lub long long? W takim razie nie upraszczaj, tylko komplikuj swój program. Na ideonie działa? Dziwne. Ale w takim razie wklej tam takie same testy jakie są na SPOJ'u i zobacz czy też będzie działał, bo na takich mikroskopijnych danych, jakie tam wkleiłeś to nie dziwota, że działa.
A jeżeli chodzi o prawdziwe uproszczenie programu, to można całkowicie zrezygnować, z zapisywania wszystkiego do tablicy, a w zamian na bieżąco na zmiaę wczytywać, obliczać, wypisywać jeżeli trzeba i dalej wczytywać kolejne liczby.
PS
Pod zadaniem były komentarze-podpowiedzi - ale jak widać nie skorzystałeś - w takim razie są one tam [były] zbędne i niepotrzebne - więc je skasowałem.
Witam, proszę o pomoc ponieważ kod wydaje mi się dobry, testy też wychodzą dobre a spoj wyrzuca mi Błędną odpowiedź.
include
using namespace std;
int suma, liczba, sumaG;
int main()
{
while(cin >> liczba)
{
if (liczba==0)
{cout << suma << endl;
sumaG+=suma;
if (suma==0)
cout << sumaG << endl;
suma=0;}
suma+=liczba;
}
return 0;
}
Mój prastary kod z printf i scanf dał… 0,26 s
Ale to z okresu, kiedy byłem skłonny kopiować cudze kody AC by na własne oczy przekonać się, że to ja robię coś źle, a nie SPOJ oraz by móc oglądać lepsze od moich kody.
Albo 4 lata temu w ciągu 2 min utworzyłem zupełnie dziki kod ze scanfami i printfami, w co nie wierzę.
No zdecyduj się.
- Wczytujesz nieokreśloną liczbę danych
- Ileś ich tam jest
- Kiedyś tam się skończą
- Jak się skończą to wyświetl sumę
- Przecież sam napisałeś, że masz wyświetlić sumę wszystkich zestawów jak dane się skończą
A w treści jest to wyraźnie napisane:
Na samym końcu należy dodatkowo podać sumę wszystkich wczytanych z wejścia liczb
Dobra przeszło w końcu ale zadanie kompletnie bez sensu żeby taką pętlę wstawiać
while (cin>>liczba) {
// jakis kod
}
cout << sumaKoncowa << endl;
@manjaro Czy możesz teraz potwierdzić lub zaprzeczyć czy odpowiadałem na Twoje pytanie, a Ty po prostu nie rozumiałeś mojej odpowiedzi? Napisałem, że temat nieokreślonej ilości danych już był poruszany nawet w tym temacie. Ta pętla była w tym temacie.
Edit: Tak po prostu dla mojej satysfakcji.
Edit2: Możesz przy okazji wyjaśnić dlaczego wstawianie takiej pętli jest kompletnie bez sensu bo ani ja ani pewnie inni forumowicze tego nie wiedzą. Zwykły while - dopóki są dane… działaj.