Найти минимум и максимум массива с N элементами - PullRequest
0 голосов
/ 20 сентября 2018

Мне нужно найти минимум и максимум массива с 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;
}

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

В соответствии с рекомендациями 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;
}
0 голосов
/ 20 сентября 2018

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

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» считается плохой практикой?

...