返回一个环形数组的最大整数组的和的最大值
#include<iostream>
#define N 1000
using namespace std;
int Compare(int Group[], int Length)
{
int MaxSum[N][2];
MaxSum[0][0] = MaxSum[0][1] = Group[0];
for (int i = 1; i < Length; i++)
{
MaxSum[i][0] = __max(MaxSum[i - 1][0], MaxSum[i - 1][1]);
MaxSum[i][1] = __max(MaxSum[i - 1][1] + Group[i], Group[i]);
}
return __max(MaxSum[Length - 1][0], MaxSum[Length - 1][1]);
}
int main()
{
int Number[N];
int length;
int y,x,a;
a=0;
cout<<"请输入数组的长度:"<<endl;
cin>>x;
cout<<"请输入一个环形数组:"<<endl;
cin>>Number[0];
length=1;
while (getchar()!='\n')
{
cin>>Number[length++];
}
for(int z=1;z<x+1;z++)
{
Number[length++]=Number[z-1];
Number[z-1]=0;
/*for(y=0;y<length;y++)
cout<<Number[y]<<endl;//测试能否正确的生成切断后的环形数组*/
/*printf("%d",Compare(Number, length));//返回每个切断后数组的值*/
if(a<Compare(Number, length))
a=Compare(Number, length);
}
cout << "该数组中的最大的子数组和为:";
cout << a << endl;
system("pause");
return 0;
}
设计思想 ;
主要是上课时老师讲的将问题降维使问题简单化例如讲一个环形数组切开后就会形成一个一维数组是问题得到了简单化
出现的问题;出现了环形数组切开后的元素的个数问题所以我们要限制这个的元素限制不能够超过原先的数组
截图


总结;主要是解决设计思路的问题再有就是代码的积累不要使用一次代码就打一次而是要有自己的储备不然就是会很麻烦

浙公网安备 33010602011771号