SUMA SPOJ

CR
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:64
0

Robie zadanie z suma https://pl.spoj.com/problems/SUMA/

Kopiuj
#include <iostream>



using namespace std;

int main() {

	int tab[300];
	int suma = 0;
	for (int i = 0; i < 300; i++) {

		cin >> tab[i];
		suma = suma + (tab[i]);
		cout << suma << endl;

		
	}

lecz nie wiem jak przerwac petle gdy wcisniety zostanie klawisz entera, bo chyba tak to trzeba zrobic?

TS
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:394
0

Raczej chodzi o to, żebyś wykrył koniec danych: http://www.cplusplus.com/reference/ios/ios/eof/

lion137
  • Rejestracja:ponad 8 lat
  • Ostatnio:2 minuty
  • Postów:4941
1

Inaczej, użyj powyższego, pętla coś w ten deseń:

Kopiuj
  while (cin >> n) {
    //TODO
    if (cin.eof())
      break;
  }

Acha i std::vector zamiast tablicy.


MarekR22
po kiego grzyba to if (cin.eof())? while to załatwia.
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:dzień
  • Lokalizacja:Szczecin
4

Tutaj w ogóle nie ma potrzeby używać żadnej tablicy.

Moje stare rozwiązanie zawiera się w kilku linijkach

Kopiuj
	int total{}, temp;
	while (std::cin >> temp) {
		total += temp;
		std::cout << total << '\n';
	}

Teraz nawet napisałem bardziej fancy rozwiązanie:

Kopiuj
#include <algorithm>
#include <iostream>
#include <iterator>

int main(){
	std::ios::sync_with_stdio(false);
	std::transform(
		std::istream_iterator<int>(std::cin), {},
		std::ostream_iterator<int>(std::cout, "\n"),
		[total = 0](int n) mutable { return total += n; }
	);
}

CR
gdybym ja tylko umial tez tak pisac xd
kq
W tym pierwszym kodzie nie ma absolutnie nic odkrywczego/trudnego. Spróbuj zrozumieć co tam robię i odtworzyć "własnymi słowami"
MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:2 minuty
1
Kopiuj
#include <numeric>
#include <iostream>
#include <iterator>

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::partial_sum(
        std::istream_iterator<int>(std::cin), {},
        std::ostream_iterator<int>(std::cout, "\n"));

    return 0;
}

https://godbolt.org/z/Wzqfnx


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:14 dni
1

Mi się bardziej podoba krótka wersja:

Kopiuj
#include <iostream>
using namespace std;

int main() 
{
    for(int sum=0,current;cin>>current;cout<<(sum+=current)<<endl) {}
    return 0;
}

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
enedil
  • Rejestracja:prawie 12 lat
  • Ostatnio:4 dni
  • Postów:1027
1

Prześcigacie się w pochwaleniu jak zgrabnie umiecie programować, a ignorujexie że OP i tak nie rozróżni między tymi podejściami

szweszwe
Czego nie rozróżni? Bo chyba nie dopisałeś jakiegoś słówka.
enedil
Po prostu nikomu nie zrobi różnicy że te modyfikacje się pojawiły, a są w pewnym sensie zaśmiecaniem wątku
MarekR22
generalnie bardziej chodzi o to, żeby pokazać, iż mimo standardowa biblioteka C++ jest dość uboga (w porównaniu do standardowych bibliotek innych języków), to jest tam spory zasób gotowych rozwiązań.
CR
ja tylko prosze o podpowiedzi odnosnie mojego kodu, jesli znalbym i rozumialbym lepsze rozwiazania to napisalbym to inaczej, niestety to jest dla mnie najbardziej zrozumiale, niestety jesli chodzi o te zadanie zarezerwowalem 300 miejsc w tablicy ( w zadaniu jest max 200), ale nie umiem przerwac petli w trakcie trwania, bo ona by sie wykonywala 300 razy, a co jesli uzytkownik chce wpisac tylko 3 lub 4 liczby? wtedy musze przerwac.. ale jak?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.