C/C++

C++. Как найти 3 самых больших числа из ряда чисел введенных пользователем?

Задачу нужно решить использовав цикл FOR, а в конце нужно вывести на экран эти три числа. Заранее благодарен за любую помощь!
#include <iostream>
using namespace std;
int main() {
int a, b, c, x, n;
do {
cout << "n: ";
cin >> n;
} while (n < 3);
cout << ">>> ";
for (auto i = 0; i < n; ++i) {
cin >> x;
if (0 == i) a = x;
else if (1 == i) {
if (a >= x) b = x;
else {
b = a;
a = x;
}
} else if (2 == i) {
if (x <= b) c = x;
else if (x > b && x <= a) {
c = b;
b = x;
} else if (x > a) {
c = b;
b = a;
a = x;
}
} else {
if (x >= a) {
c = b;
b = a;
a = x;
} else if (x >= b) {
c = b;
b = x;
} else if (x > c) c = x;
}
}
cout << "<<< " << a << ' ' << b << ' ' << c << '\n';
system("pause > nul");
}
Вл@д Пастухов
Вл@д Пастухов
63 994
Лучший ответ
Андрей Кривша а как можно сделать так, чтоб в той же последовательности (ну или в другой), программа вычислила и вывела на экран количество попадания самого крупного элемента в последовательности? Допустим : 5 6 6 3 1 >>>2; 1 1 1 1 1 1 1 >>> 7
Примерно так

cin >> n;
if(n < 3)exit(1);
cin >> a[1] >> a[2] >> a[3];
for(i=3;i < n;i++){
cin>>a[0];
sort(a,a+4);
}
cout<<a[3]<<a[2]<<a[1];
Андрей Кривша здравствуйте, спасибо за помощь. Проблемма в том, что для решения этой задачи, мы можем использовать, только цикл FOR или WHILE, и IF-ELSE...
а почему именно for?
я бы решал так: загрузить всё в std::vector, далее std::sort и забрать 3 последних значения
Миша Петров
Миша Петров
1 107
Андрей Кривша это все конечно классно:), только мы еще проходим цикл FOR, и в описании задачи четко изложено, что нужно решить при помощи цикла... вот уже целых двух часов ломаю голову, и не могу представить алгоритм действий...: (
Миша Петров для типа данных T, MIN_VALUE -- минимальное сравниваемое значение для типа T, длина входного массива N:

T max1 = MIN_VALUE, max2 = MIN_VALUE, max3 = MIN_VALUE;
T input [ N ];
for (int i = N; --i >= 0; ) {
T v = input [ i ];
if (v <= max1) continue;
max1 = v;
if (v <= max2) continue;
max1 = max2;
max2 = v;
if (v <= max3) continue;
max2 = max3;
max3 = v;
}
::printf ("%? %? %?\n", max3, max2, max1);
Вл@д Пастухов #include <iostream>
using namespace std;
int main() {
int a, b, c, x, n;
do {
cout << "n: ";
cin >> n;
} while (n < 3);
cout << ">>> ";
for (auto i = 0; i < n; ++i) {
cin >> x;
if (0 == i) a = x;
else if (1 == i) {
if (a >= x) b = x;
else {
b = a;
a = x;
}
} else if (2 == i) {
if (x <= b) c = x;
else if (x > b && x <= a) {
c = b;
b = x;
} else if (x > a) {
c = b;
b = a;
a = x;
}
} else {
if (x >= a) {
c = b;
b = a;
a = x;
} else if (x >= b) {
c = b;
b = x;
} else if (x > c) c = x;
}
}
cout << "<<< " << a << ' ' << b << ' ' << c << '\n';
system("pause > nul");
}
Рахатбек Байсалов Ну выведи 3 значения через цикл, пусть все будут довольны.
Андрей Кривша а как можно сделать так, чтоб в той же последовательности (ну или в другой), программа вычислила и вывела на экран количество попадания самого крупного элемента в последовательности? Допустим : 5 6 6 3 1 >>>2; 1 1 1 1 1 1 1 >>> 7