【问题标题】: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 你也可以试试下面的答案。

标签: c++ arrays max min iostream


【解决方案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 可以容纳的值范围。

      【讨论】:

        猜你喜欢
        • 2013-04-24
        • 2020-05-13
        • 1970-01-01
        • 2018-05-03
        • 2020-07-12
        • 2017-08-18
        • 2012-11-03
        • 1970-01-01
        相关资源
        最近更新 更多