Algorytm obliczający sumę liczb parzystych i ilość nieparzystych

0

Witam, muszę "wymyślić" algorytm. Zadanie brzmi następująco:
Napisz algorytm który wczytuje ciąg liczb całkowitych różnych od 0 i obliczający sumę liczb parzystych i liczbę liczb nieparzystych. Nie wiemy ile mamy liczb do wczytania.

Siedzę już 5 raz nad tym zadaniem i za cholerę nie wiem jak to zrobić.

0

w c++ może to wyglądać następująco:

 
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>

int main() {

	std::vector<int> nums;

	while(true) {
		std::string liczba;
		std::getline(std::cin,liczba);

		if(liczba == "") {
			break;
		}

		int n;
		std::stringstream ss(liczba);
		ss >> n;
		nums.push_back(n);
	}

	int sumaNieparzyste = 0;
	int sumaParzyste = 0;

	std::for_each(nums.begin(), nums.end(), [&sumaParzyste, &sumaNieparzyste](int n)->void 
	{if(!(n % 2)) sumaParzyste += n; else sumaNieparzyste += n;});

	std::cout <<"\nSuma liczb Parzystych: "<< sumaParzyste <<"\nSuma liczb nieparzystych: "<< sumaNieparzyste;

	std::cin.get();
	return 0;
}
0
patrykbierz napisał(a):

Witam, muszę "wymyślić" algorytm. Zadanie brzmi następująco:
Napisz algorytm który wczytuje ciąg liczb całkowitych różnych od 0 i obliczający sumę liczb parzystych i liczbę liczb nieparzystych. Nie wiemy ile mamy liczb do wczytania.

Siedzę już 5 raz nad tym zadaniem i za cholerę nie wiem jak to zrobić.

Dzisiaj będę litościwy.

user image

Tu masz schemat algorytmu który wczytuje liczby różne od zera, a gdy napotka zero wypisze sumę wszystkich uprzednio wpisanych liczb i się zakończy. Od tego masz ~2 kroki żeby przerobić to na algorytm odrębnie sumujący liczby parzyste i liczby nieparzyste. Liczę na to że dalej dasz radę...

1

@robcio Można prościej ;)

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
 
int main(int argc, char** argv)
{
    std::vector<int> input;
    std::copy_if(std::istream_iterator<int>(std::cin), std::istream_iterator<int>(), std::back_inserter(input), [](int n) { return n != 0; });
    int sumEven = 0, sumOdd = 0;
    std::for_each(input.cbegin(), input.cend(), [&](int i) { if (n % 2 == 0) sumEven += n; else sumOdd += n; });
    std::cout << "Suma parzystych: " << sumEven << "\nSuma nieparzystych: " << sumOdd << std::endl;
}

Co nie zmienia faktu, że pytanie było o rozwiązanie w C:

#include <stdio.h>

int main()
{
    int sumEven = 0;
    int sumOdd = 0;
    int n;
    while (scanf("%d", &n) != EOF) {
        if (n % 2 == 0)
            sumEven += n;
        else
            sumOdd += n;
    }
    printf("Suma parzystych: %d\nSuma nieparzystych: %d\n", sumEven, sumOdd);
    return 0;
}
0

Jak już piszemy w innych językach:

import sys

def main():
    data = map(lambda x: int(x), sys.stdin.read().split())
    print reduce(lambda x, y:x + y, filter(lambda x: x % 2 == 0, data),0)
    print len(filter(lambda x: x % 2 != 0, data))

main()

0

Może nie piękne, ale (dla mnie) zrozumiałe i zwięzłe. Można ładniej (i tak było), ale się nudzę na wykładzie, więc trochę to zgolfowałem.

puts *ARGF.read.split.map(&:to_i).select { |i| i != 0 }.partition(&:even?).map(&:length)
0

Do poprzedników: ma być SUMA liczb PARZYSTYCH oraz ILOŚĆ liczb NIEPARZYSTYCH.

Do autora:

patrykbierz napisał(a):

Napisz algorytm który wczytuje ciąg liczb całkowitych różnych od 0 i obliczający sumę liczb parzystych i liczbę liczb nieparzystych. Nie wiemy ile mamy liczb do wczytania.
Zapewne chodzi o to, że 0 ma kończyć podawanie liczb. Zatem:

  • zainicjuj wynik zerami (sumę liczb parzystych i licznik liczb nieparzystych)
  • w "nieskończonej" pętli (for(;;))
    - wczytaj liczbę (użyj scanf)
    - jeśli liczba jest równa 0 to przerwij pętlę (użyj break)
    - jeśli liczba jest parzysta
    - dodaj ją do sumy liczb parzystych
    - w przeciwnym razie (nieparzysta)
    - zwiększ licznik liczb nieparzystych o 1
  • wyświetl wynik

Zakładam, że takie rzeczy jak wczytanie liczby, sprawdzenie parzystości, dodanie jednej liczby do drugiej czy inkrementacja licznika to umiesz zrobić. Trzeba te klocki wpakować w pętlę i dwa if'y jak to pokazałem powyżej.

0

Tak, dawajcie wszystkim gotowce...

1 użytkowników online, w tym zalogowanych: 0, gości: 1