【问题标题】:How can I handle this variation?我该如何处理这种变化?
【发布时间】:2015-10-22 07:25:30
【问题描述】:

在没有 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;
}

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

【问题讨论】:

  • 如何区分连续元素?

标签: c++ arrays algorithm c++11


【解决方案1】:

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

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

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

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

(顺便说一句,您没有初始化变量 excl,因此有时可能会得到不正确的结果)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-15
    • 2012-12-16
    • 2016-06-22
    • 2020-04-05
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多