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ę. #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 ] |
|
Monika90 |
» 2017-04-30 18:32:12 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. |
|
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 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 |
|
hit |
» 2017-05-04 10:11:03 Zeruj sumę po wyświetleniu. 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. |
|
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ź". #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; }
|
|
mateczek |
» 2017-06-29 08:59:09 if( n == 0 && d == 0 ) cout << s << endl;
co to jest ?? po co to ?? |
|
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;
|
|
mateczek |
» 2017-06-29 10:36:36 #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; d = 0; } } cout << s; return 0; } |
|
« 1 » 2 |