• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SPOJ zadanie proste dodawanie

VPS Starter Arubacloud
0 głosów
631 wizyt
pytanie zadane 22 lipca 2016 w C i C++ przez hakiros54 Obywatel (1,160 p.)

witam, zrobiłem program do tego zadania http://pl.spoj.com/problems/RNO_DOD/ zrobiłem program taki jak tam, nie wiem dlaczego mi nie zalicza :/ jest tyle prób ile chcę, pokazuje dobre obliczenia, jest tyle liczb ile chcę, naprawdę nie wiem dlaczego nie zalicza :/ pisze tylko błąd wykonania (SIGABRT)   ktoś wie co źle zrobiłem?

ps. prosze nie dawać gotowca tylko powiedzieć gdzie jest problem

 

#include <iostream>

using namespace std;
int ile_t, ile_l, wynik=0;
int main()
{

    cin>>ile_t;

    for(int i=0; i<ile_t; i++)
    {

        cin>>ile_l;
        int *tablice;
        tablice = new int[ile_l];

    for(int i=0; i<ile_l; i++)
    {

      cin>>tablice[ile_l];
      wynik+=tablice[ile_l];
    }
  cout<<wynik<<endl;
    wynik=0;
    }

    return 0;
}

 

4 odpowiedzi

0 głosów
odpowiedź 22 lipca 2016 przez MetRiko Nałogowiec (37,110 p.)
edycja 22 lipca 2016 przez MetRiko
Ech.. zacznijmy od tego, że ten program nie zwraca dobrego wyniku.. powiem więcej.. na wyjście nawet nie przypomina, które jest oczekiwane przez SPOJ'a.
Prosty przykład:
Wejście:
2
2
1 2
3
1 2 3
Wyjście:
2
2
1 2
3
3
1 2 3
6
Wyjście oczekiwane przez SPOJ'a:
3
6
Ponadto w drugiej pętli deklarujesz drugi raz zmienną [ i ].. zamień jej nazwę na inną.
komentarz 22 lipca 2016 przez Michał Muzyka Pasjonat (24,080 p.)
przecież wyjście jest dobre, i deklarowane 2 razy oraz nie zwalnianie pamięci
komentarz 22 lipca 2016 przez MetRiko Nałogowiec (37,110 p.)
edycja 22 lipca 2016 przez MetRiko
Nie.. wyjście nie jest dobre. Zadanie wymaga podania wejścia, a na wyjściu ma się pojawić wynik. Natomiast w tym wypadku wyjście jest pomieszane z wejściem i zamiast pojawienia się na wyjściu (dwie ostatnie linijki):
3
6
To wyniki te są wymieszane z wprowadzanymi danymi i w efekcie końcowym zamiast otrzymać:
2
2
1 2
3
1 2 3
3
6
mamy:
2
2
1 2
3
3
1 2 3
6
A tego już niestety SPOJ nie ogarnia bo nie wie nawet jak to sprawdzić.. wychodzi mu, że wynikiem jest
1 2 3
6
Gdzie on spodziewał się tylko dwóch liczb w osobnych liniach.
komentarz 22 lipca 2016 przez hakiros54 Obywatel (1,160 p.)
czyli mam zapisać te wyniki które wyjdą, jak wszystkie obliczenia się wykonają wyczyścić ekran i wtedy je wypisać? dobrze rozumiem?
komentarz 22 lipca 2016 przez MetRiko Nałogowiec (37,110 p.)
Ekranu czyścić nie musisz. Mówiąc bardzo prostym językiem..
Jeżeli na końcu działania programu konsola będzie wyglądać tak:
2
2
1 2
3
1 2 3
3
6
(Dwie ostatnie linijki wypisują się automatycznie)
To znaczy, że zrobiłeś to dobrze..
Czyli tak jak napisałeś.. możesz to zrobić za pomocą wcześniejszego zapisywania wyników i wypisania ich na końcu.
komentarz 22 lipca 2016 przez Michał Muzyka Pasjonat (24,080 p.)
nie chce się kłócić ale komputer sam wie co jest strumieniem wejścia i wyjścia i sam wybiera to co ma do niego wejść, a co wyjść, jak nie wierzysz polecam sprawdzić np. film Zelenta na temat spoja, jest to dobre wyjście
komentarz 22 lipca 2016 przez MetRiko Nałogowiec (37,110 p.)
Nigdy nie wiadomo kiedy nauczysz się czegoś nowego..
Właśnie napisałem dwa programy do tego zadania.. jedno z "pomieszanym" wynikiem, a drugie uporządkowane w stylu Input->Output. Okazało się, że obydwa zostały przyjęte bez problemu. Przyznaję.. miałeś rację.. dzięki, że zwróciłeś mi uwagę x)
komentarz 22 lipca 2016 przez Michał Muzyka Pasjonat (24,080 p.)
no widzisz, ja dowiedziałem się o tym oglądając film Zelenta, bo głowiłem się jak zrobić uporządkowane wyjście dla 100tys danych żeby nie zużyć zbyt dużo pamięci
komentarz 22 lipca 2016 przez MetRiko Nałogowiec (37,110 p.)
Wracając do zadania.. Zamiast głowić się dlaczego twój kod nie działa proponuję napisać go bez używania tablic.. Nie powinno być wtedy żadnego problemu, a kod będzie krótszy i prostszy.
komentarz 22 lipca 2016 przez hakiros54 Obywatel (1,160 p.)

dalej mi to nie zalicza.... uporządkowałem program tak jak mówiliście pomimo też iż powinno teoretycznie już prędzej działać bo jak wspomnieliście komputer wie co jest strumieniem wejścia a co wyjścia... ehh oto mój nowy kod, oblicza wszystko tak jak chcieli, kolejność ta sama, wyniki są napisane na końcu, wyniki są dobre, o co więc chodzi?

nie głowię się dlaczego kod nie działa tylko dlaczego mi go nie zalicza, może faktycznie bez tych tablic zadziała...

#include <iostream>

using namespace std;
int ile_t, n;
int main()
{

    cin>>ile_t;
    int *w;
    w= new int [ile_t];
    for(int i=0; i<ile_t; i++)
    {
      w[i]=0;
        cin>>n;
        int *tablice;
        tablice = new int[n];

    for(int l=0; l<n; l++)
    {

      cin>>tablice[n];
      w[i]+=tablice[n];
    }


    }

    for(int i=0; i<ile_t; i++)
    {
        cout<<w[i]<<endl;

    }

    return 0;
}

 

komentarz 22 lipca 2016 przez Michał Muzyka Pasjonat (24,080 p.)
ten kod na początku był dobry tylko nie potrzebna była tablica, zrób kod z tym co napisałem ci na dole
0 głosów
odpowiedź 22 lipca 2016 przez Michał Muzyka Pasjonat (24,080 p.)

problemem jest chyba to że nie zwalniasz pamięci po tej dynamicznej tablicy
w ogóle to nie trzeba jej używać
 

for(int i=0; i<ile_l; i++)
{
int l;
cin>>l;
wynik+=a;
}

 

komentarz 22 lipca 2016 przez Michał Muzyka Pasjonat (24,080 p.)
problem polega na dwukrotnym użyciu zmiennej i w pętlach, oraz nie usuwaniu dynamicznej tablicy
0 głosów
odpowiedź 23 lipca 2016 przez manjaro Nałogowiec (37,390 p.)
Ktoś tu na siłę chyba próbuje utrudnić sobie najprostsze możliwe zadanie ;)

Tu nie trzeba cudować z tablicami czy wskaźnikami. Wystarczą dosłownie 3 zmienne i 2 pętle ;)

Wydaje mi się za dużo filmów a za mało treningów. To jest zadanie na poziom 2-3 pierwszych filmów M. Zelenta.

A sędzia programu nie zalicza bo jest problem z liczbami ujemnymi. Sprawdź.
komentarz 23 lipca 2016 przez hakiros54 Obywatel (1,160 p.)
pierwsze zadanie które robie na tej stronie ;P jestem na odc. 12 czy coś koło tego gdy pokazano na kursie tę stronę... tylko że wpisuje np. 1 test 2 liczby -3 -3 i daje mi - 6, daje -3 i 3 i dostaję 0 więc gdzie jest problem ;p? tak z ciekawości pytam bo program i tak od nowa zrobie bez tablic
komentarz 23 lipca 2016 przez manjaro Nałogowiec (37,390 p.)
Widzę że sobie poradziłeś ;)
0 głosów
odpowiedź 23 lipca 2016 przez hakiros54 Obywatel (1,160 p.)

ok, dzięki za pomoc, zrobiłem taki kod i już działa, tylko nie podoba mi się to że zrobiłem program który spełniał wszystkie wymagania zadania i nie zaliczyło mi go bo nie pasował do klucza...

#include <iostream>

using namespace std;
int ile_t, ile_l, wynik=0, n;
int main()
{
    cin>>ile_t;
     for(int i=0; i<ile_t; i++)
     {
      cin>>ile_l;
      for(int l=0; l<ile_l; l++)
      {
          cin>>n;
          wynik+=n;

      }
     cout<<wynik<<endl;
     wynik=0;

    }

    return 0;
}

 

komentarz 23 lipca 2016 przez Michał Muzyka Pasjonat (24,080 p.)
pasował, tylko nie usuwałeś dynamicznie zadeklarowanej pamięci, co jest niedopuszczalne i uznaje się to za kod błędny

Podobne pytania

0 głosów
1 odpowiedź 779 wizyt
pytanie zadane 4 czerwca 2017 w C i C++ przez Michał Biernacki Użytkownik (670 p.)
0 głosów
1 odpowiedź 331 wizyt
pytanie zadane 27 stycznia 2017 w C i C++ przez chucksqll Stary wyjadacz (12,930 p.)
0 głosów
2 odpowiedzi 824 wizyt
pytanie zadane 26 sierpnia 2016 w C i C++ przez prownnie Początkujący (280 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...