Найти минимум и максимум массива с N элементами

Мне нужно найти минимум и максимум массива с N элементы. Дело в том, что моя программа работает, но когда я отправляю ее на веб-сайт, она дает мне только 32 указывает из 100 и я не знаю что не так.

#include <iostream>

using namespace std;

int main() {
int N,min,max;
cin >> N;
min = N;
max = N;

int i,x;
for (i = 1; i <= N; ++i) {
cin >> x;

if ( x < min ) {
min = x;
}
if (x > max) {
max = x;
}
}
cout << min <<" "<< max;
return 0;
}

0

Решение

Ваша логика здесь

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

Если вы хотите найти мин-макс уже существующий массив, Вы могли бы хотеть рассмотреть использование станд :: 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» считается плохой практикой?

5

Другие решения

По предложению vivek_23, Используйте первый элемент как мин и макс:

#include <iostream>

using namespace std;

int main()
{
int N,min,max;
cin >> N;
cin>>min;
max = min;

int i,x;
for (i = 1; i < N; ++i){
cin >> x;

if ( x < min ){
min = x;
}
if (x > max){
max = x;
}
}
cout << min <<" "<< max;
return 0;
}

Альтернативное решение:
Добавьте дополнительные заголовки и используйте максимальные и минимальные ограничения

#include <iostream>
#include <cmath>
#include <climits>

using namespace std;

int main()
{
int N,min,max;
cin >> N;
min = INT_MAX; //take largest value
max = INT_MIN; //take smallest value

int i,x;
for (i = 1; i <= N; ++i){
cin >> x;

if ( x < min ){
min = x;
}
if (x > max){
max = x;
}
}
cout << min <<" "<< max;
return 0;
}
2