Wątek przeniesiony 2014-10-21 13:10 z C/C++ przez ŁF.

3 co do wielkości z wczytanych niezerowych liczb

0

Program wczytuje liczby całkowite do momentu pojawienia się 0, zwracający trzecią co do wielkości z wczytanych, niezerowych liczb (zakładając, że było ich nie mniej niż trzy)

#include <iostream>
using namespace std;
int main()
{
 
   int a =1;
   int max1=a;
	while ( a != 0 )
	{
		cout << " Podaj liczbę: "<< endl;
	    cin >> a;
		

		if(a>max1)
		{
		max1=a;
		}
		else 
		{
			max1;
		}
	}
		cout << "Wpisales 0. Największa wpisana liczba to: " << max1  << endl;
		
		
	
	
    
    system("pause");
	
}

Wczytuję liczby, sprawdzam czy nie są równe zero, jeżeli są kończę program i podaje 3 co do wartości liczbę - problem w tym że nie wiem jak zapisać 3 co do wartości liczbę. Wiem jak określić największą, ale nie wiem jak 2 i 3 co do wartości. Podsunie ktoś jakiś pomysł?

0

potrzebujesz do tego co najmniej 4 zmienne (3 lub wszystkie 4 z których mogą być w postaci tablicy.

0

Program ma być bez tablic

0

Ok, to że potrzebuję 4 zmiennych to się domyślam ( a, max1, max2, max3) tylko nie wiem jak podstawiać pod te zmienne 3 największe wartości

0

Pierwsze trzy wczytujesz do max1, max2, max3 i sortujesz je.
Każdą kolejną wczytujesz do max4 i znowu sortujesz (tu tylko jeden przebieg).

0
awankijew napisał(a):

Program ma być bez tablic

#include <iostream>
#include <iterator>
#include <set>
using namespace std;

int main() {
	int in_number;
	enum{ end_of_input_value = 0, which_from_end = 3 };
	set<int> numbers;
	
	while((cin>>in_number) && in_number != end_of_input_value)
			numbers.insert(in_number);

	auto it = numbers.cend();
	advance(it, -which_from_end);
	
	cout << *it;
	return 0;
}

http://ideone.com/TQtof7

0

Nie wiele mi to mówi, dopiero zaczynam się uczyć więc chce to zrobić jak najprostszym sposobem (dla laika) - jak w tej pętli którą napisałem podstawiać wczytywane liczby pod te zmienne aby potem je posortować?

0

No to rób a nie smaruj na forum, jak będziesz mieć konkretny problem to wal jak w dym.

0
#include <iostream>

#include <boost/optional.hpp>

int main()
{
	boost::optional<int> first, second, third;
	int temp = 0;

	while(std::cin >> temp && (temp != 0)) {
		// for inputs up to 3 of count value.
		if(!first) {
			first = temp;
		} else if(!second) {
			if(temp >= first) {
				second = boost::get<int>(first);
				first = temp;
			} else {
				second = temp;
			}
		} else if(!third) {
			if(temp >= first) {
				third = boost::get<int>(second);
				second = boost::get<int>(first);
				first = temp;
			} else if(temp >= second) {
				third = boost::get<int>(second);
				second = temp;
			} else {
				third = temp;
			}
		} else {
			// for inputs above 3 of count value.
			if(temp >= first) {
				third = boost::get<int>(second);
				second = boost::get<int>(first);
				first = temp;
			} else if(temp >= second) {
				third = boost::get<int>(second);
				second = temp;
			} else if(temp > third) {
				third = temp;
			}
		}
	}

	if(third) {
		std::cout << boost::get<int>(third);
	} else {
		std::cout << "Insufficient number of inputs.";
	}

	return 0;
}

http://melpon.org/wandbox/permlink/IvQ4dTwYpAGSCIvU

boosta zastosowałem jedynie po to, żeby poradzić sobie z inicjalizacją

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