Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

SPOJ(KC008 - Sumy wielokrotne)

Ostatnio zmodyfikowano 2017-06-29 19:06
Autor Wiadomość
pawlowski
Temat założony przez niniejszego użytkownika
SPOJ(KC008 - Sumy wielokrotne)
» 2017-04-30 16:35:19
Witam. To mój debiut na forum, więc prosze o wyrozumiałość.
Zmagam się z poniższym zdaniem (sumy wielokrotne).
http://pl.spoj.com/problems/KC008/

W zadaniu jest mowa o nieokreślonej liczbie zestawów danych. Każdy zestaw kończy się zerem, więc tak sobie pomyślałem, że program będzie wyświetlał liczby i je zsumowywał do momentu, aż zostanie wczytana liczba 0 dla każdego z przypadków.
Tylko, że zrobiłem oddzielne pętle dla trzech przypadków (a,b,c). NIe da się tego jakoś ukrócić aby zrobić jedną pętle.
Poniżej mój kod. Proszę o sprawiedliwą jego krytykę.

C/C++
#include <iostream>
using namespace std;
long long a, b, c, suma1 = 0, suma2 = 0, suma3 = 0, s;
int main()
{
   
    for( a;; )
    {
        cin >> a;
        suma1 += a;
        if( a == 0 )
        {
            cout << suma1 << endl;
            break;
        }
    }
    for( b;; )
    {
        cin >> b;
        suma2 += b;
        if( b == 0 )
        {
            cout << suma2 << endl;
            break;
        }
    }
    for( c;; )
    {
        cin >> c;
        suma3 += c;
        if( c == 0 )
       
        {
            cout << suma3 << endl;
            break;
        }
    }
    s = suma1 + suma2 + suma3;
    cout << s << endl;
   
    return 0;
}
[ / cpp ]
P-160623
Monika90
» 2017-04-30 18:32:12
C/C++
long long n;
while( std::cin >> n )
{
}
Taką pętlą wczytasz wszystkie liczby. Tzn. ta pętla się przerwie gdy sprawdzarka zakończy podawanie danych na wejście.
P-160626
pawlowski
Temat założony przez niniejszego użytkownika
» 2017-05-04 07:28:27
Ok, dzięki. Tylko co dalej?
Chodz mi o to jak zrobić aby program wczytywał liczbę a dopóki jedna z nich nie będzie zerem i wtedy sumuje i wczytuje następne liczby.
Jeśli zrobię tak
C/C++
long long n, suma;
while( cin >> n )
{
    suma += n;
    if( n == 0 ) cout << suma << endl;
   
}
return 0;
To wtedy mam np. IN: 3 6 0, 2 4 5 0, 5 0 i OUTt 9 20 25 zamiast OUT 9 11 5
P-160694
hit
» 2017-05-04 10:11:03
Zeruj sumę po wyświetleniu.
C/C++
suma += n;
if( n == 0 )
{
    cout << suma << endl;
    suma = 0;
}

Edit:

Doczytałem w Twoim zadaniu, że "Na samym końcu należy dodatkowo podać sumę wszystkich wczytanych z wejścia liczb (jest ona mniejsza niż 10^15)"

W związku z tym należy użyć dodatkowej zmiennej, która będzie sumowała wszystko bez zerowania.
P-160695
pawlowski
Temat założony przez niniejszego użytkownika
» 2017-06-29 08:22:50
Witam raz jeszcze. Napisałem takie coś. Program podaje prawidłowe odpowiedzi, ale na spoju pojawia się komunikat "błędna odpowiedź".

C/C++
#include <iostream>
using namespace std;
int main()
{
   
    long long s = 0, n, d = 0;
    while( cin >> n )
    {
        d += n;
        if( n == 0 )
        {
            cout << d << endl;
            s += d;
            if( n == 0 && d == 0 ) cout << s << endl;
           
            d = 0;
        }
    }
    return 0;
}
P-162921
mateczek
» 2017-06-29 08:59:09
C/C++
if( n == 0 && d == 0 ) cout << s << endl;


co to jest ?? po co to ??
P-162922
darko202
» 2017-06-29 09:01:47
//program podaje prawidłowe odpowiedzi
dla przykładowych danych tak jest,
,ale dla innych danych np.

11 8 2 -1 0
6 33 -9 10 0

nie jest dobrze, bo nieprawidłowy jest warunek w
if( n == 0 && d == 0 )
           
zakłada że d == 0;

P-162923
mateczek
» 2017-06-29 10:36:36
C/C++
#include <iostream>
using namespace std;
int main()
{
   
    long long s = 0, n, d = 0;
    while( cin >> n )
    {
        d += n;
        if( n == 0 )
        {
            cout << d << endl;
            s += d;
            //if( n == 0 && d == 0 ) cout << s << endl;//do wywalenia linijka i program przejdzie
            d = 0;
        }
    }
    cout << s;
    return 0;
}
P-162924
« 1 » 2
  Strona 1 z 2 Następna strona