C/C++

C++ Второй минимум

Второй минимум
Последовательность состоит из натуральных чисел и завершается числом 0. Определите значение второго минимального по величине элемента в этой последовательности, то есть элемента, который будет наименьшим, если из последовательности удалить наименьший элемент.

Последнее число 0 не учитывается. Гарантируется, что в последовательности есть хотя бы два элемента (кроме завершающего числа 0).

Входные данные

На вход подаётся последовательность целых неотрицательных чисел, заканчивающаяся нулём. Все числа в последовательности неотрицательные, по значению не превосходящие 109.

Выходные данные

Выведите ответ на задачу.
Ну, ищи сразу 2 элемента - минимальный и "следующий". Т. е.
i == 0: min = seq[0]; nexMin = uninitialized
i == 1: min = seq[ 0 ] < seq[ 1 ] ? seq[ 0 ] : seq[1]; nextMin = seq[ 0 ] < seq[ 1 ] ? seq[ 1 ] : seq[0]
а для остальных - просто сравнивай
Aslan Kuatov
Aslan Kuatov
38 458
Лучший ответ
#include <iostream>

using namespace std;

int main()
{
const unsigned limit = 109;
const int size = 100;
unsigned A[size];
unsigned min1,min2;
int i;
for(i = 0; i < size; i++)
{
cin >> A[i];
if(i < 2 && A[i] == 0U)
{
cout << "Должно быть хотя бы два ненулевых значения." << endl;
i--;
}
else if(A[i] == 0U) break;
}
min1 = min2 = A[0];

for(int x = 1; x < i; x++)
{
if(min2 == min1)
{
if(A[x] < min1) min1 = A[x];
}
else if(A[x] < min1)
{
min2 = min1;
min1 = A[x];
}
else if(A[x] < min2)
{
min2 = A[x];
}
}
cout << endl << min2 << endl;
return 0;
}
С вектором:
#include <vector>
#include <iostream>
#define u unsigned long long int
using namespace std;
int main()
{
u number, min, mini;
vector <u> numbers;
cin >> number;
min = mini = number;
numbers.push_back(number);
while (true)
{
cin >> number;
if (number == 0) break;
if (number < min) min = number;
numbers.push_back(number);
}
cout << "main minimum " << min << endl;
for (u n: numbers) if (n > min)
{ mini = n; break; }
for (u n: numbers) if (n < mini)
if (n != min) mini = n;
if (mini != min) cout << "subminimum "
<< mini << endl;
}
AP
Aleksey Popow
66 572
Сортируй по возрастанию. С индексом [1] самый второй
Роман Р.
Роман Р.
21 700
Роман Р. int Otvety[20]= {89,45,78,23,67,98,64,21,45,67,8,3,56,78,98,34,67,8,23,56};

for(int i=0; i<20; i++) cout << Otvety[i] << '\t';
cout << endl << endl;

sort(Otvety, Otvety+20);
for(int i=0; i<20; i++) cout << Otvety[i] << '\t';
cout << endl << endl;

cout << "Второе минимальное значение = " << Otvety[1] << endl;
подключи
#include algorithm
[*] Для таких задач желательно указывать ограничения курса, иначе будут предлагать решения самой разнообразной сложности.

А это — на всякий случай, может быть полезным:

https://pastebin.com/u/-Peer-

*)
ВС
Вова Семёнов
16 172
Вова Семёнов Привет Степику!