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

Program usuwający liczby mniejsze od średniej

0 głosów
399 wizyt
pytanie zadane 24 października 2018 w C i C++ przez KmNwK Nowicjusz (210 p.)

Treść problemu jest taka:

Dana jest tablicy liczb całkowitych (nie więcej niż 100 elementów).W jednym kroku usuwane są wszystkie liczby mniejsze lub równe średniej. Po ilu minimalnie krokach y tablicy zostaną usunięte wszystkie elementy?

Wejście

Pierwsza liczba to liczba liczb. Potem kolejno po spacjach wypisane zostają właściwe liczby.

Wyście

Pojedyncza liczba oznaczająca minimalną liczbę kroków.

Przykład

Wejście

6 4 4 4 6 6 6 

Wyjście 

2

Nie wiem dokładnie jak taki program napisać, zwłaszcza jak dopisać wartości podane przez użytkownika do tablicy i robić na niej działania.

Z góry dziękuje, jestem nowy w C++.

komentarz 24 października 2018 przez niezalogowany

W jednym kroku usuwane są wszystkie liczby mniejsze lub równe średniej. Po ilu minimalnie krokach y tablicy zostaną usunięte wszystkie elementy?

To jest nielogiczne. Jesteś pewien, że wstawiłeś pełną i poprawną treść zadania?

komentarz 24 października 2018 przez KmNwK Nowicjusz (210 p.)
Tak pewien.

3 odpowiedzi

0 głosów
odpowiedź 24 października 2018 przez Zayebisty Gaduła (3,200 p.)
no  skoro pierwsza liczba to liczba wszystkich liczb to  zczytujesz ja i dynamicznie tworzysz odpowienio duza tablice zapisujesz do niej reszte  liczb potem liczysz srednia to chyba umiesz z podstawowki i potem usuwasz liczac kroki najlepiej w petli
0 głosów
odpowiedź 24 października 2018 przez KmNwK Nowicjusz (210 p.)
#include <iostream>

using namespace std;

int main()
{
	int tab[100], licznik = 0, i = 0, liczba_liczb;
	double srednia = 0;
	cin >> liczba_liczb;
	for (i = 0; i < liczba_liczb; i++)
	{
		cin >> tab[i];
	}
    double suma = 0;
	for ( i = 0; i <liczba_liczb; i++)
	{	
		suma = suma + tab[i];
	}
	 srednia = (suma) / liczba_liczb;
	for (int t = liczba_liczb - 1; t >= 0; t--)
		{
			if (tab[t] < srednia)
			{
				tab[t] = 0;
				++licznik;	
				suma = 0;
				for (i = 0; i <liczba_liczb; i++)
				{
					suma = suma + tab[i];
				}
			 srednia = (suma) / liczba_liczb;
			}
			 
		}			
	cout << licznik;
	return 0;
}

4 godziny poprawiałem ale działa, dziekuję za uwagę.

0 głosów
odpowiedź 24 października 2018 przez RafalS VIP (122,780 p.)

Ja bym to tak zrobił:

#include <iostream>
#include <algorithm>
#include <vector>
#include <numeric>
using namespace std;

int main()
{
	int n, number;
	cin >> n;
	vector<int> v;
	v.reserve(n);
	for (int i = 0; i < n; i++) {
		cin >> number;
		v.push_back(number);
	}
	int counter = 0;
	while (v.size() > 0) {
		counter++;
		double average = accumulate(v.begin(), v.end(), 0.0) / v.size();
		v.erase(remove_if(v.begin(), v.end(), [average](int x) { return x <= average; }), v.end());
	}
	cout << counter << endl;
}

Podobne pytania

–1 głos
0 odpowiedzi 583 wizyt
pytanie zadane 18 stycznia 2016 w Inne języki przez niezalogowany
0 głosów
1 odpowiedź 1,440 wizyt
pytanie zadane 2 maja 2018 w C i C++ przez XSPACE Użytkownik (690 p.)
0 głosów
1 odpowiedź 308 wizyt
pytanie zadane 5 grudnia 2018 w C i C++ przez Cevet Nowicjusz (120 p.)

93,741 zapytań

142,676 odpowiedzi

323,294 komentarzy

63,322 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...