繁体   English   中英

使用数组查找最大差异

[英]Find Maximum Difference using array

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

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

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] ,中间没有可能的值。

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

或者,您可以使用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;
}

演示

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

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

暂无
暂无

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

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