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

Sumy Wielokrotne - SPOJ: Błędna Odpowiedź

Object Storage Arubacloud
0 głosów
1,294 wizyt
pytanie zadane 5 sierpnia 2017 w C i C++ przez Kamil Paradowski Użytkownik (620 p.)

Mam problem z tym zadaniem: Mój kod wygląda tak:

#include <iostream>

int main()
{
    long long int a;
    long long int b=0;
    long long int c=0;
    while (std::cin>>a)
    {
        b+=a;
        if (a==0 && b==0)
        {
            std::cout<<b<<std::endl;
            break;
        }
        else if (a==0)
        {
            std::cout<<b<<std::endl;
            c+=b;
            b=0;
        }
    }
    std::cout<<c<<std::endl;
    return 0;
}

Treść zadania: http://pl.spoj.com/problems/KC008/

Na moim kompilatorze wszystko dobrze się zsumuje, wyświetla, kod też nie jest jakiś pogmatwany chyba a mimo to SPOJ wywala mi błędną odpowiedź. Jakieś pomysły co tutaj mogłem pominąć?

2 odpowiedzi

0 głosów
odpowiedź 5 sierpnia 2017 przez Aisekai Nałogowiec (42,190 p.)
A sprawdź sobie, co się stanie jak podasz jako jeden zestaw, więcej niż dwa składniki. Podaj ich np 4. Potem w drugim zestawie podaj 4. I zobacz czy otrzymasz 3 wyniki (2x wynik sum tych dwóch zestawów oraz całkowitą sumę)
komentarz 5 sierpnia 2017 przez Kamil Paradowski Użytkownik (620 p.)
Czyli mam po prostu wywołać std::cin>>a; jeszcze 3x w pętli?
komentarz 5 sierpnia 2017 przez Aisekai Nałogowiec (42,190 p.)
Nvm, nie zobaczyłem czegoś. Jest ok
0 głosów
odpowiedź 5 sierpnia 2017 przez niezalogowany
edycja 5 sierpnia 2017

Skoryguj kod pod taki zestaw:

2 -2 0
1 -1 0
0

EDIT: Kod działający:
 

#include <iostream>

int main()
{
    long long int a;
    long long int b = 0;
    long long int c = 0;
    while( std::cin >> a )
    {
        b += a;
        if( a == 0 )
        {
            std::cout << b << "\n";
            c += b;
            b = 0;
        }
    }
    std::cout << c << "\n";
}

Nie trzeba używać break, bo spoj i tak przerwie pętle gdy dane się skończą. Jako zadanie domowe zostawię Ci byś skorygował swój kod z breakiem :D

komentarz 5 sierpnia 2017 przez Kamil Paradowski Użytkownik (620 p.)
#include <iostream>

int main()
{
    int a;
    long long int b=0;
    long long int c=0;
    short d=0;
    while (std::cin>>a)
    {
        d++;
        b+=a;
        if (a==0 && d==1)
        {
            std::cout<<b<<std::endl;
            break;
        }
        else if (a==0)
        {
            std::cout<<b<<std::endl;
            c+=b;
            b=0;
        }
    }
    std::cout<<c<<std::endl;
    return 0;
}

Zmodyfikowałem mój kod do tej wersji i już działa, jednak nie rozumiem dlaczego jest ok wg. SPOJa mimo tego iż program mi nie przerywa pętli po wprowadzeniu wartości 0 jako pierwszy element innego zestawu danych niż pierwszy. wg. przykładu z wejścia program się chyba przerywa po wprowadzeniu samego zera.

komentarz 5 sierpnia 2017 przez Kamil Paradowski Użytkownik (620 p.)
#include <iostream>

int main()
{
    int a;
    long long int b=0;
    long long int c=0;
    while (std::cin>>a)
    {
        b+=a;
        if (a==0)
        {
            std::cout<<b<<std::endl;
            c+=b;
            b=0;
        }
    }
    std::cout<<c<<std::endl;
    return 0;
}

Skróciłem kod do takiej postaci... Chyba w rzeczywistości nie przerywa się po prostu pętli po wprowadzneniu zera... Jestem już zmieszany

komentarz 5 sierpnia 2017 przez niezalogowany
Zamotałem się ;/
komentarz 6 sierpnia 2017 przez d0n Mądrala (6,440 p.)

Nigdzie w treści nie ma napisane, że jeśli zestaw sklada się z jednej liczby i jest nią zero, to jest to zestaw ostatni. W kodzie, który dałeś w pytaniu to było właśnie problemem, możliwe są testy w postaci:
 

3 2 0
1 2 0
0
4 5 0

Podobne pytania

0 głosów
0 odpowiedzi 281 wizyt
+1 głos
1 odpowiedź 486 wizyt
0 głosów
1 odpowiedź 201 wizyt
pytanie zadane 29 sierpnia 2016 w C i C++ przez plkpiotr Stary wyjadacz (12,420 p.)

92,555 zapytań

141,404 odpowiedzi

319,559 komentarzy

61,940 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...