Второй минимум
Последовательность состоит из натуральных чисел и завершается числом 0. Определите значение второго минимального по величине элемента в этой последовательности, то есть элемента, который будет наименьшим, если из последовательности удалить наименьший элемент.
Последнее число 0 не учитывается. Гарантируется, что в последовательности есть хотя бы два элемента (кроме завершающего числа 0).
Входные данные
На вход подаётся последовательность целых неотрицательных чисел, заканчивающаяся нулём. Все числа в последовательности неотрицательные, по значению не превосходящие 109.
Выходные данные
Выведите ответ на задачу.
C/C++
C++ Второй минимум
Ну, ищи сразу 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]
а для остальных - просто сравнивай
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]
а для остальных - просто сравнивай
#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;
}
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;
}
#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;
}
Сортируй по возрастанию. С индексом [1] самый второй
[*] Для таких задач желательно указывать ограничения курса, иначе будут предлагать решения самой разнообразной сложности.
А это — на всякий случай, может быть полезным:
https://pastebin.com/u/-Peer-
*)
А это — на всякий случай, может быть полезным:
https://pastebin.com/u/-Peer-
*)
Вова Семёнов
Привет Степику!
Похожие вопросы
- Какие из этих книг вы посоветуете прочесть в первую очередь чтобы повысить свои знания в C/C++?
- Задача по C++
- День добрый \[-_-]/ вопрос по вузовскому программированию на си(C)
- Программирование C++ ПРОШУ ПОМОЧЬ!
- Почему создатель Linux Линус Торвальдс называет C++ ужасным языком, а ядро ОС Linux пишется только на Си?
- Задача на C++ (Остатки).
- Сделать перестановку чисел с помощью функции в C++, но у меня получается чепуха
- Задача по c++ на векторы. Часть программы написана. Нужны правки.
- Проблема с указателем в C++
- Програмирование на C/C++ на основе блоксхемы
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