在随机数组中查找最小值和最大值

Finding min and max value in a random array

本文关键字:最小值 最大值 查找 随机 数组      更新时间:2023-10-16

处理一个要求我投入某些功能的作业(查找最大值/min值,阵列中随机数的总和和平均值(,我已经设法完成了所有它们,但以最小值为单位,我的价值为-2145379808。我不确定我在哪里搞砸了,我会很高兴的帮助。到目前为止的代码:

#include <cstdlib>
#include <iostream>
#include <ctime>
using namespace std;

int main(int argc, char** argv) {
    {
        cout << "Enter array size " << endl;
    }
    float avg;
    float sum;
    int size;
    cin >> size;
    int array[size]; 
    int max = array [0];
    int min = array [0];
    srand((unsigned)time(NULL));
    for (int i = 1; i < size + 1; i++)
    {
        array[i] = 1+rand()%100 ;
        sum += array[i];
        cout << "number " << i << " = "<< array[i] << endl;
    }
    for (int x = 1; x < size; x++){
        if (array[x] > max){
            max = array[x]; 
        }
         if (array[x] < min){
            min = array[x]; 
        }
    }
    cout << "nmax = " << max << endl;
    cout << "nmin = " << min << endl;
    cout << "nsum = "<< sum << endl;
    cout << "navg = " << sum / size << endl;
    return 0;
}

maxmin设置为array的非初始化元素永远不会结束。在此注释中,您还需要初始化sum。由于不使用它,因此您不妨删除avg

一旦知道它是什么,就需要将maxmin设置为array的第一个元素。粗鲁,您可以将max设置为std::numeric_limits<int>::min(),将min设置为std::numeric_limits<int>::max()

还请注意, array界限array[0]array[size - 1]。因此,您需要重新审视循环中的索引。

然后,一旦您可以使用它,并使用std::vector<int>,然后使用minmax_element:http://en.cppreference.com/w/cpp/algorithm/minmax_element

问题是以下行:

float avg;
float sum;
...
int max = array [0];
int min = array [0];

因为此时array [0]的值是垃圾值
要纠正您的代码如下(还包括climits标头文件(。另外,相应地更改循环索引:

float avg = 0;
float sum = 0;
...
int max = INT_MIN;
int min = INT_MAX;

以下是校正的代码(进行优化的一些更改(。在这里看到它:

#include <cstdlib>
#include <iostream>
#include <ctime>
#include <climits>
using namespace std;

int main(int argc, char** argv) {
    {
        cout << "Enter array size " << endl;
    }
    float sum = 0;
    int size;
    cin >> size;
    int array[size]; 
    int max = INT_MIN;
    int min = INT_MAX;
    srand((unsigned)time(NULL));
    for (int i = 0; i < size; i++)
    {
        array[i] = 1+rand()%100 ;
        sum += array[i];
        cout << "number " << i << " = "<< array[i] << endl;
        if (array[i] > max){
            max = array[i]; 
        }
         if (array[i] < min){
            min = array[i]; 
        }
    }
    cout << "nmax = " << max << endl;
    cout << "nmin = " << min << endl;
    cout << "nsum = "<< sum << endl;
    cout << "navg = " << sum / size << endl;
    return 0;
}

确保正确初始化maxmin,C 为所有类型提供std::numeric_limits。他们每个都有max()min()成员功能,以返回类型的maxmin值。在任何代码中,您都希望找到最大值和最小值,您希望首先将最大值初始化至最小值,反之亦然。这样,任何值都将大于您的min,并且比max小。

您使用std::numeric_limits类似:

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

让我知道您是否还有更多问题。