您的位置:首页 > 其它

首尾相连最大子数组和(3)

2015-04-16 12:41 176 查看
#include<iostream>
using namespace std;
#define N 4

void max(int a[],int &s,int &jmin,int &jmax)
{
int sum=a[0],b=a[0],x=0,y=0;
int    j=1;
while((j-x<N)&&x<N)
{
if(b>=0)
{
b=a[j%N];
if(j<N)
x=j;
else
break;
}
else
b+=a[j%N];
if(sum>=b)
{ sum=b;y=j;}
j++;
}
sum=0;
for(int i=y+1;i<x+N;i++)
sum+=a[i%N];
s=sum;jmin=y+1;jmax=x+N-1;
int z=y%N;
if(x>=z)
{
j=1;sum=a[0];b=a[0];x=0;y=0;
while(j<N)
{
if(b<0)
{ b=a[j%N];x=j;}
else
b+=a[j%N];
if(sum<=b)
{ sum=b;y=j;}
j++;
}

s=sum;jmin=x;jmax=y;
}
else if((x==0)&&(y==(N-1)))
{
sum=a[0];b=a[0];x=0;y=0;
for(int o=1;o<N;o++)
{
if(a[o]>sum)
{sum=a[o];x=o;y=o;}
}
s=sum;jmin=x;jmax=y;
}
}
int main()
{
int a
={0,0,0,0};

cout<<"随机产生数组为:";
for(int i=0;i<N;i++)
cout<<a[i]<<"  ";
cout<<endl;

int s=a[0],jmin=0,jmax=0;
max(a,s,jmin,jmax);

cout<<"相应子数组为:";
cout<<jmin<<endl<<jmax<<endl;
for(int i=jmin;i<=jmax;i++)
cout<<a[i%N]<<" ";
cout<<endl;

return 0;
}


设计思路:介于第一次与第二次都有类似的问题,于是将两次的代码结合,互相弥补。
后感:前两次的程序都有相同的问题,但是两个程序是互补的,所以将两个程序结合,再出现问题,继续改。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: