在数组中查找最大和最小数

Posted

技术标签:

【中文标题】在数组中查找最大和最小数【英文标题】:finding maximum and minimum number in array 【发布时间】:2021-11-29 13:14:48 【问题描述】:

我编写了以下代码,允许用户输入一个数组并给出该数组中的最大值和最小值

当我输入数组值的长度 = 4 并且数组元素为:- 32,152,38 时,它给出的输出为 最大值 = 1973314801 和最小值 = 24(意外值)

以下代码:-

#include<iostream>
using namespace std;
int main()

    int n;
    cout<<"input length of array = ";
    cin>>n;
    int array[n];
    for(int i=0; i<n;i++)
    
        int a;
        cout<<"input element "<<i+1<<" = ";
        cin>>a;
    
    int max=array[0];
    int min=array[0];
    for(int i=0; i<n;i++)
    
        if(array[i]>max)
        
            max=array[i];
        
        if(array[i]<min)
        
            min=array[i];
        
    
    cout<<"max = "<<max<<endl;
    cout<<"min = "<<min;

但是当我在代码中定义数组的值时,它会给出预期的输出(min=3 和 max=12)

code(已经定义数组值的代码):-

#include<iostream>
using namespace std;
int main()

    int array[4]=3,6,9,12;
    int max=array[0];
    int min=array[0];
    for(int i=0; i<4;i++)
    
        if(array[i]>max)
        
            max=array[i];
        
        if(array[i]<min)
        
            min=array[i];
        
    
    cout<<"max = "<<max<<endl;
    cout<<"min = "<<min;

这可能是什么问题?

【问题讨论】:

cin &gt;&gt; a;?您从未将读入的值存储到array。在第二种情况下,array 已经有价值,所以它起作用了。 array[n] 是 VLA,它是 GCC 中的编译器扩展,使您的代码不可移植。 STL 有很多实用函数 找std::minmax_element @KeshavNischal 你也可以试试下面的答案。 【参考方案1】:

根据 C++ 标准,C++ 数组的大小必须是编译时间常数。所以你的第一个代码示例是不正确。也就是说,您不能将用户的数组大小作为输入。您必须像在第二个示例中那样明确指定数组的大小。

您可以为此使用std::vector

【讨论】:

【参考方案2】:

您将输入数据存储在变量 a 而不是数组 array 中,并且您不能像那样分配数组大小。使用前必须将大小指定为常量。

#include<iostream>
using namespace std;
int main()

    const int n = 4;
    /*cout<<"input length of array = ";
    cin>>n;*/
    int array[n];
    for(int i=0; i<n;i++)
    
        cout<<"input element "<<i+1<<" = ";
        cin>>array[i];
    
    int max=array[0];
    int min=array[0];
    for(int i=0; i<n;i++)
    
        if(array[i]>max)
        
            max=array[i];
        
        if(array[i]<min)
        
            min=array[i];
        
    
    cout<<"max = "<<max<<endl;
    cout<<"min = "<<min;

但是如果您仍然想将大小作为用户输入,那么您必须在堆内存中创建该数组

#include<iostream>
using namespace std;
int main()

    int n;
    cout<<"input length of array = ";
    cin>>n;
    int* array = new int[n]; //array in heap
    for(int i=0; i<n;i++)
    
        cout<<"input element "<<i+1<<" = ";
        cin>>array[i];
    
    int max=array[0];
    int min=array[0];
    for(int i=0; i<n;i++)
    
        if(array[i]>max)
        
            max=array[i];
        
        if(array[i]<min)
        
            min=array[i];
        
    
    cout<<"max = "<<max<<endl;
    cout<<"min = "<<min;
    delete [] array;

【讨论】:

【参考方案3】:

你不需要数组;使用 running 最小值和最大值计算:

int minimum;
int maximum;
cin >> minimum;
maximum = minimum;
int number;
while (cin >> number)

    if (number > maximum) maximum = number;
    if (number < minimum) minimum = number;

cout << "Maximum: " << maximum
     << ", Minimum: " << minimum
     << "\n";

不需要存储数字,只需要比较数字来确定最大值和最小值。

仍然满足要求,因为程序正在输入一个数组或一堆数字。

running min 和 max 的一个很好的特点是可以输入的数字数量没有限制。唯一的限制是 int 可以容纳的值范围。

【讨论】:

以上是关于在数组中查找最大和最小数的主要内容,如果未能解决你的问题,请参考以下文章

查找数组的最小值和最大值

我想要一个c程序来查找我使用数组编写的最大和最小数字有人可以帮助我如何在不使用数组的情况下制作[关闭]

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

在给定数组中查找最小值和最大值,其中约束应最小值索引应小于其最大值

使用LINQ在数组中查找最小和最大日期?

把数组中的数拼接起来,求最大值