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

Problem z sumowaniem liczb przez program.

Object Storage Arubacloud
+1 głos
263 wizyt
pytanie zadane 22 stycznia 2021 w C i C++ przez rain.deer Początkujący (430 p.)

Rozwiązuję teraz proste zadanie z internetu: If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Find the sum of all the multiples of 3 or 5 below 20.

O ile program dobrze wybiera mi z podanego zakresu liczby podzielne przez 3 lub 5, ale potem źle je sumuje. Nie wiem, co zrobiłam źle.

#include <iostream> 
int main() {
	int a = 3;
	int b = 5;
	int sumaA = 0;
	int sumaB = 0;
	for (a = 3; a <= 20; a++) {
		if (a % 3 == 0)
			std::cout << a << std::endl;
			
	}
	sumaA += a;
	std::cout << "==============" << std::endl;
	std::cout << sumaA << std::endl;
	std::cout << "========================" << std::endl;



	for (b = 5; b <= 20; b++) {
		if (b % 5 == 0)
			std::cout << b << std::endl;
	}
	sumaB += b;
	std::cout << "==============" << std::endl;
	std::cout << sumaB << std::endl;
	std::cout << "========================" << std::endl;
	std::cout << "Suma wszystkich liczb podzielnych przez 3 lub 5 wynosi: " << sumaA + sumaB << std::endl;
	return 0;
	
}


 

2 odpowiedzi

+1 głos
odpowiedź 22 stycznia 2021 przez tkz Nałogowiec (42,000 p.)
Zwróć uwagę w którym miejscu sumujesz.
komentarz 22 stycznia 2021 przez rain.deer Początkujący (430 p.)

Jeśli przesunę sumowanie do pętli for nadal daje to błędne wyniki. sad

komentarz 22 stycznia 2021 przez tkz Nałogowiec (42,000 p.)
Połowa sukcesu. Teraz zastanów się dlaczego masz if'a. Mała podpowiedź, to on decyduje kiedy chcesz dodać.
komentarz 22 stycznia 2021 przez rain.deer Początkujący (430 p.)

Przed chwilą przesunęłam sumowanie do "if" i zadziałało jak należy. Teraz tylko pozostaje zrozumieć dlaczego zadziałało. XD
Dziękuję za podpowiedź. smiley

1
komentarz 22 stycznia 2021 przez tkz Nałogowiec (42,000 p.)
Sumujesz tylko i wyłącznie jeżeli liczba jest wielokrotnością 3, lub 5. Więc sumowanie musi odbyć się tylko wtedy, gdy if jest prawdziwy.
Czyli:
1%3 = 2 fałsz
2%3 = 1 fałsz
3%3 = 0 prawda, tutaj dodajmy przez wykonanie tej linii sumaA += a;
komentarz 22 stycznia 2021 przez rain.deer Początkujący (430 p.)

Ok, już rozumiem. Dziękuję.smiley

0 głosów
odpowiedź 23 stycznia 2021 przez VBService Ekspert (252,740 p.)
edycja 23 stycznia 2021 przez VBService

Tu masz jeszcze "malutki" błąd wink

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. The sum of these multiples is 23. Find the sum of all the multiples of 3 or 5 below 20.

...

for (a = 3; a <= 20; a++)  {

na

for (a = 3; a < 20; a++)  {

analogicznie

for (b = 5; b < 20; b++) {

Jedna pętla wink + prosta prezentacja danych

#include <iostream>
#include <string>

int main() {
    int a = 3;
    int b = 5;
    
    std::string sumaA_ = "";
    std::string sumaB_ = "";
    
    int sumaA = 0;
    int sumaB = 0;
    
    for (int i = 0; i < 20; ++i) {
        if (i % a == 0 && i > 0) {
            sumaA_ += std::to_string(i) + " ";
            sumaA += i;
        }

        if (i % b == 0 && i > 0) {
            sumaB_ += std::to_string(i) + " ";
            sumaB += i;
        }             
    }
    
    std::cout << sumaA_ << std::endl;
    std::cout << "===============" << std::endl;
    std::cout << "suma A: " << sumaA << "\n\n";
    
    
    std::cout << sumaB_ << std::endl;
    std::cout << "===============" << std::endl;
    std::cout << "suma B: " << sumaB << "\n\n";

    std::cout << "Suma wszystkich liczb podzielnych przez " << a << " lub " << b << " wynosi: " << sumaA + sumaB << std::endl;
    return 0;
}

 

1
komentarz 23 stycznia 2021 przez rain.deer Początkujący (430 p.)
No wiem, że powinno być tylko "mniejsze od" a nie "mniejsze równe". Celowo to zmieniłam.

Jeszcze nie jestem na etapie używania "stringu", ale dziękuję, przemyślę to rozwiązanie. Zastanawiałam się jeszcze wczoraj, jak można by skrócić i uprościć kod, miałam na początku pomysł ze wprowadzeniem trzeciej zmiennej "i", ale raczej wpadałam na takie pomysły, które jeszcze bardziej komplikowały sprawę niż ją upraszczały.

Podobne pytania

0 głosów
4 odpowiedzi 172 wizyt
0 głosów
0 odpowiedzi 1,031 wizyt
0 głosów
2 odpowiedzi 161 wizyt

92,555 zapytań

141,402 odpowiedzi

319,552 komentarzy

61,939 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!

...