【问题标题】:Find Maximum Difference using array使用数组查找最大差异
【发布时间】:2021-12-24 08:35:12
【问题描述】:
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
    int num;
    long long max = 0;
    long long min;
    cin >> num;
    long long *ptr = new long long[num];
    for (int x = 0; x < num; x++)
    {
        cin >> ptr[x];
    }
    cout << "ptr for first elemnt" << endl;
    cout << ptr[0];
    for (int x = 1; x < num; x++) // 1 4 6 3 min 1  max 1
    {
        max = ptr[0];
        if (max < ptr[x])
            max = ptr[x];
        min = ptr[0];
        if (min > ptr[x])
            min = ptr[x];
    }

    cout << "max value " << max;
    cout << "Min value is " << min;
    cout << max - min; // biggest number minues smallest number

    return 0;
}

我试图找到数组中数字之间的最大差异,但我得到了数组中最大和最小差异最大的数字,但是当我检查最大值和最小值时,我发现它们是错误的,为什么会这样?

【问题讨论】:

  • 您不需要数组。您可以在输入每个数字后跟踪最大值和最小值。
  • 欢迎来到 Stack Overflow。请查看我们的intro section,特别注意minimal complete examples 上的页面。你给它什么数字?它是否正确找到最大值?分钟呢? 缩小范围,您可能会自己发现错误。

标签: c++ arrays max min


【解决方案1】:
for (int x = 1; x < num; x++) // 1 4 6 3 min 1  max 1
{
    max = ptr[0];
    if (max < ptr[x])
        max = ptr[x];
    min = ptr[0];
    if (min > ptr[x])
        min = ptr[x];
}

试试这个:

max = ptr[0];
min = ptr[0];
for (int x = 1; x < num; x++) // 1 4 6 3 min 1  max 1
{
    if (max < ptr[x])
        max = ptr[x];
    if (min > ptr[x])
        min = ptr[x];
}

问题是您每次都在重置 min 和 max,所以它基本上会变成 ptr[0] 或 ptr[n] ,两者之间没有可能的值。

这可能不是您唯一的问题,但这是一个开始。

【讨论】:

    【解决方案2】:

    或者,您可以使用minmax_element 算法来获取数组的最小值和最大值:

    #include <algorithm> // minmax_element
    #include <iostream>
    
    using std::cin;
    using std::cout;
    using std::endl;
    
    int main()
    {
        int num;
        long long max = 0;
        long long min;
        cin >> num;
        long long *ptr = new long long[num];
        for (int x = 0; x < num; x++)
        {
            cin >> ptr[x];
        }
        cout << "ptr for first element: " << ptr[0] << "\n";
    
        auto [min_it, max_it] = std::minmax_element(ptr, ptr + num);
        cout << "max - min: " << *max_it - *min_it << "\n";
    
        return 0;
    }
    

    Demo

    【讨论】:

      【解决方案3】:

      我要做的是先对数组进行排序,然后从最后一个数字中减去第一个数字(希望您了解指针)

      #include <iostream>
      #include <algorithm>
      
      using namespace std;
      
      int main(){
          int num ; 
          cin >> num ;
          int*ptr = new int[num];
          for(int i=0 ; i<num ; i++){
              cin >> ptr[i];
          }
          sort(ptr , ptr+num);
          int max_diff = ptr[num-1] - ptr[0];
          cout << "max difference is " << max_diff;
          return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 2020-03-27
        • 2016-11-17
        • 2010-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-13
        • 2020-09-19
        相关资源
        最近更新 更多