最大子数组的和首尾相接(3)
#include<iostream>
using namespace std;
#define Nu 5
int main()
{
int a[Nu]={1,2,3,-1,4};
cout<<"随机产生数组为:";
for(int i=0;i<Nu;i++)
cout<<a[i]<<" ";
cout<<endl;
int sum=a[0],b=a[0],x=0,y=0;
int j=1;
while((j-x<Nu)&&x<Nu)
{
if(b>=0)
{
b=a[j%Nu];
if(j<Nu)
x=j;
else
break;
}
else
b+=a[j%Nu];
if(sum>=b)
{ sum=b;y=j;}
j++;
}
sum=0;
for(int i=y+1;i<x+Nu;i++)
sum+=a[i%Nu];
int z=y%Nu;
if(x>z)
{
j=1;sum=a[0];b=a[0];x=0;y=0;
while(j<Nu)
{
if(b<0)
{ b=a[j%Nu];x=j;}
else
b+=a[j%Nu];
if(sum<=b)
{ sum=b;y=j;}
j++;
}
cout<<x<<endl<<y<<endl;
cout<<"相应子数组为:";
for(int i=x;i<=y;i++)
cout<<a[i]<<" ";
cout<<endl;
}
else
{
cout<<x<<endl<<y<<endl;
cout<<"相应子数组为:";
for(int i=y+1;i<x+Nu;i++)
cout<<a[i%Nu]<<" ";
cout<<endl;
}
cout<<"相邻子数组最大和为:"<<sum<<endl;
return 0;
}
设计思路:介于第一次与第二次都有类似的问题,于是将两次的代码结合,互相弥补。
后感:本来觉得很简单,后来测试发现问题很多,这个可能还有错,继续努力吧
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。