• 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ź

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
1,594 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 419 wizyt
+1 głos
1 odpowiedź 712 wizyt
0 głosów
1 odpowiedź 233 wizyt
pytanie zadane 29 sierpnia 2016 w C i C++ przez plkpiotr Stary wyjadacz (12,420 p.)

93,191 zapytań

142,206 odpowiedzi

322,042 komentarzy

62,518 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 3053p. - dia-Chann
  2. 2998p. - Łukasz Piwowar
  3. 2993p. - Łukasz Eckert
  4. 2970p. - CC PL
  5. 2930p. - Tomasz Bielak
  6. 2907p. - Łukasz Siedlecki
  7. 2890p. - rucin93
  8. 2584p. - Adrian Wieprzkowicz
  9. 2536p. - Mikbac
  10. 2485p. - Marcin Putra
  11. 2461p. - Michał Telesz
  12. 2418p. - Michal Drewniak
  13. 2156p. - Anonim 3619784
  14. 1733p. - rafalszastok
  15. 1650p. - Mariusz Fornal
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...