在数组中查找最大和,以使没有2个元素相邻。在这种情况下,还存在一个条件,即首尾元素也不应一起使用。
如果没有最后一个条件,那就是我开发了以下代码,其中我使用了两个变量incl
和excl
并找出了值。如下:
#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/