首页 > 解决方案 > 黑客等级 C++ 上的 Mini-Max Sum

问题描述

给定五个正整数,找出可以通过将五个整数中的四个恰好相加来计算的最小值和最大值。然后将各自的最小值和最大值打印为单行的两个空格分隔的长整数。

void min_max(unsigned  long  int arr[]){
            unsigned  long  int max = arr[0];
            unsigned  long  int min = arr[0];
            for(int i=1; i<5; i++){
            if(arr[0] > arr[i]) min = arr[i];
            if(arr[0] < arr[i]) max = arr[i];
        }
        cout << min << " " << max;
    }

unsigned  long  int Sum(unsigned  long  int arr[], int n){
    unsigned  long  int sum = 0;
    for(int i = 0; i<5; i++){
        sum += arr[i];
    }
    sum = sum - arr[n];
    return sum;
}

int main(){
    unsigned  long  int arr[5];
    for(int i=0; i<5; i++){
        cin >> arr[i];
    }

    unsigned  long  int SUM[5];
    for(int j=0; j<5; j++){
        SUM[j] = Sum(arr, j);
    }
    min_max(SUM);
}

如果输入的数字很小,那么我的代码没有问题,但是当,比如说,一些非常大的数字,比如 293247447,那么它说测试用例失败了。我不知道为什么,有人可以帮我吗?

标签: c++

解决方案


您将看到的简单解决方案,只有两个循环,但可能非常复杂O(N*N)

void miniMaxSum(vector<int> arr)
{
    // LLONG_MAX --> set min to the highest value in long long 
    // LLONG_MIN --> set max to the lowest value in long long but why lowest value ? because you want highest value
    long long min = LLONG_MAX , max = LLONG_MIN , sum ;
    for(int i = 0 ;i < arr.size() ; ++i)
    {
        sum = 0;
        for(int j = 0; j < arr.size() ; ++j)
        {
            if(i != j)
                sum += arr[j];
        }

        if(sum > max)
            max = sum;

        if (sum < min)
            min = sum;
    }

    cout << min << " " << max << endl;
}

推荐阅读