繁体   English   中英

查找具有N个元素的数组的最小值和最大值

[英]Find the minimum and maximum of an array with N elements

我需要找到具有N元素的数组的最小值和最大值。 事实是我的程序正在运行,但是当我在网站上提交该程序时,我得到100分中只有32分,而我不知道出了什么问题。

#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;
}

你的逻辑在这里

min = N;
max = N;

N初始化它们是错误的。 当用户输入中有最小值(例如0并且N大于0 ,您永远找不到最小值。 最大也会发生同样的情况。

int最大可能值初始化min用最小可能的值初始化max ,如下所示:

int min = std::numeric_limits<int>::max();
int max = std::numeric_limits<int>::min();

建议-1

看起来您不想保存用户输入来查找mim和max,因此可以使用std::minstd::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; ,为什么呢? 看到这篇文章: 为什么“使用命名空间标准”被认为是不好的做法?

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;
}

替代解决方案:添加额外的标头并使用int max和min限制

#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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM