在数组中查找最大和,以使没有2个元素相邻。在这种情况下,还存在一个条件,即首尾元素也不应一起使用。

如果没有最后一个条件,那就是我开发了以下代码,其中我使用了两个变量inclexcl并找出了值。如下:

#include <iostream>

using namespace std;

int main (void)
{
    int i,n;
    cin>>n;
    int arr[100];
    for ( i = 0; i < n; i++ )
        cin>>arr[i];
    int incl,excl,excls;
    incl = arr[0];
    for ( i = 1; i < n; i++ )
    {
        if (incl > excl)
            excls = incl;
        else
            excls = excl;
        incl = excl + arr[i];
        excl = excls;
    }
    if (incl > excl)
        cout<<incl;
    else
        cout<<excl;
    cout<<"\n";
    return 0;
}

如何针对特殊情况对此进行修改?谢谢!

最佳答案

为了解决特殊情况,您可以运行现有算法两次。

首次计算数组中前n-1个元素的最佳和。这将计算出绝对不包括最后一个元素的最佳总和。

第二次计算阵列中最后n-1个元素的最佳总和。这将计算出绝对不包括第一个元素的最佳总和。

最好的答案将是这两个结果中的最好的。

(顺便说一下,您没有初始化变量excl,因此有时可能会得到错误的结果)

关于c++ - 如何处理这种变化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31732220/

10-13 06:31