Ваша логика здесь
min = N;
max = N;
, инициализируя их N
, неверна.Когда у вас есть минимальное число, например, 0
в вашем пользовательском вводе, а ваш N
больше, чем 0
, вы никогда не найдете свой минимум.То же самое будет по максимуму.
Инициализируйте min
с максимально возможным значением int
и max
с наименьшим возможным значением, как показано ниже:
int min = std::numeric_limits<int>::max();
int max = std::numeric_limits<int>::min();
Предложение - 1
Похоже, что вы не хотите сохранять пользовательский ввод для поиска mim и max, вы можете использовать функции std::min
и std::max
следующим образом:
#include <iostream>
#include <limits> // std::numeric_limits<>
#include <algorithm> // std::min, std::max
int main()
{
// initialize like this
int min = std::numeric_limits<int>::max();
int max = std::numeric_limits<int>::min();
int N;
std::cin >> N;
while (N--)
{
int x; std::cin >> x;
min = std::min(x, min); // use std::min
max = std::max(x, max); // use std::max
}
std::cout << min << " " << max;
return 0;
}
Предложение - 2
Если вы хотите найти min-max уже существующего массива , вы можете рассмотреть возможность использования std :: minmax_element вместо.
#include <algorithm> // std::minmax_element
#include <iostream>
#include <vector>
int main()
{
int N; std::cin >> N;
std::vector<int> v(N);
for(auto& element: v) std::cin >> element;
// do something.....
// to find min-max of the array
auto result = std::minmax_element(v.begin(), v.end());
std::cout << "min element is: " << *result.first << '\n';
std::cout << "max element is: " << *result.second << '\n';
}
Примечание на стороне : Не практикуйте с std namespüace std;
, почему?см. этот пост: Почему «использование пространства имен std» считается плохой практикой?