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

Średnia arytmetyczna z dwóch największych liczb [bez wykorzystania tablicy]

42 Warsaw Coding Academy
0 głosów
448 wizyt
pytanie zadane 29 listopada 2015 w C i C++ przez agre Użytkownik (550 p.)
edycja 29 listopada 2015 przez agre

Mam wczytaj 4 liczby rzeczywiste, znaleźć z nich dwie największe. I tylko z nich policzyć śr. arytmetyczną.

#include <iostream>
using namespace std;

int main()
{
	float a, b, c, d;
	cin >> a >> b >> c >> d;
	float max1 = a;
	float max2 = a;	

	if (b > a) max1 = b;
	if (c > a) max1 = c;
	if (d > a) max1 = d;

	if (a == max1)
	{
		
		if ((c > b) && (c>d)) max2 = c;
		if ((d > b) && (d>c)) max2 = d;

	}
	if (b == max1)
	{
	
		if ((c > a) && (c>d)) max2 = c;
		if ((d > a) && (d>c)) max2 = d;

	}
	if (c == max1)
	{
		
		if ((b > a) && (b>d)) max2 = b;
		if ((d > a) && (d>b)) max2 = d;

	}
	if (d == max1)
	{
		if ((c > a) && (c>b)) max2 = c;
		if ((b > a) && (b>c)) max2 = b;

	}

	cout << (max1 + max2) / 2 << endl;

	return 0;
}

 

Coś takiego udało i się wymyślić. Wcześniej rozgałęziałam to na jeszcze więcej ifów. Najlepszym rozwiązaniem byłoby jakoś ze zbiory 4 liczb "wyrzucić" tę największą i znaleźć największą spośród pozostałych. Tylko jak to zrobić? 

3 odpowiedzi

+1 głos
odpowiedź 29 listopada 2015 przez Schizohatter Nałogowiec (39,600 p.)
Utwórz dwie zmienne: max1 oraz max2 i ustaw je na 0.

Wprowadź w pętli 4 liczby, np. do zmiennej x - za każdym razem sprawdzaj, czy x > max2. Jeśli tak, to:

max1 = max2

max2 = x

i na koniec policz średnią z max1 i max2. Powinno działać.
komentarz 29 listopada 2015 przez notabigthreat Mądrala (7,060 p.)
a jeśli zostaną wprowadzone same liczby ujemne?
komentarz 29 listopada 2015 przez Schizohatter Nałogowiec (39,600 p.)
to przy pierwszej liczbie nie sprawdzaj warunku, tylko ustaw od razu max1=x i max2=x, a reszte już porównuj :) Bo jak mniemam ze zbioru -1,-2,-3,-4 ma wybrać -1 i -2. Jeśli -3 i -4 miałoby być wybrane, to znaczy, że chodzi o wybranie największej wartości bezwzględnej, więc musisz porównywać wartość bezwzględną liczby.
komentarz 29 listopada 2015 przez andrzej_bl Bywalec (2,390 p.)
Przy liczbach 2, 4, 3, 1 ten program nie zadziała ponieważ max1 przyjmie wartość  2; max2 przyjmie wartość 4; a trójka będzie porównywana z max2 i zostanie odrzucona.

Trochę trzeba skomplikować:

max1 przechowuje największą liczbę

max2 przechowuje drugą co do wielkości

x nowa liczba

jeśli x > max1 to max2 = max1; max1 = x;

jeśli x <= max1 oraz x > max2 to max2 = x;
0 głosów
odpowiedź 29 listopada 2015 przez Baakoma Użytkownik (780 p.)
Poczytaj o tablicach :) Zrób tablicę licz rzeczywistych i 2 wskaźniki , jeden dla największej, a drugi dla 2. Największej, odpowiednia petla i iify, i powinno być ok.
komentarz 29 listopada 2015 przez agre Użytkownik (550 p.)

Problem w tym, że muszę to zrobić bez tablicy :/
Takie jest polecenie prowadzącego.

Ale rzeczywiście, nie ujęłam tego w pytaniu, już się poprawiam smiley

0 głosów
odpowiedź 29 listopada 2015 przez Porcupine Nałogowiec (31,560 p.)
Takie najprostsze, najktósze rozwiązanie to wziąć tablicę 4 elementową typu float lub double np. float A[4]; , użyć funkcji sort() z biblioteki <algorithm>, która sortuje tablice rosnąco i wypisać:  (A[2] + A[3]) / 2.0; Takie rozwiązanie ma dosłownie 3 linijki kodu i ani jednego if'a.

Pozdrawiam,

Podobne pytania

0 głosów
2 odpowiedzi 479 wizyt
0 głosów
1 odpowiedź 669 wizyt
0 głosów
3 odpowiedzi 1,942 wizyt
pytanie zadane 23 marca 2016 w C i C++ przez dartespl Użytkownik (830 p.)

93,376 zapytań

142,377 odpowiedzi

322,517 komentarzy

62,724 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...