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

#include<iostream>
using namespace std;
#define Nu 5

int main()
{
    int a[Nu]={2,-2,4,-6,1};

    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++;
    } 

    cout<<x<<endl<<y<<endl;
    sum=0;
    for(int i=y+1;i<x+Nu;i++)
        sum+=a[i%Nu];
    cout<<"相邻子数组最大和为:"<<sum<<endl;

    cout<<"相应子数组为:";
    for(int i=y+1;i<x+Nu;i++)
        cout<<a[i%Nu]<<" ";
    cout<<endl;

    return 0;
}

成员:宋雨佳 周雪莹

设计思路:继第一次的首尾相连最大子数组和,这是改进版,因为当1 2 3 -1 2时,-1是不能被舍弃的,所以就反其道而行,求最小的子数组和,余下的便是最大子数组。

后感:还屁颠屁颠的觉得首尾相连简简单单就做完了,在帮同学看程序时发现了自己程序的不足,但是这次程序也不是很完善,全负数和全正数没有考虑,哎呀不想写了!目前还没有举出不符合算法的数组,考虑不完整,以后发现继续完善

posted @ 2015-04-15 22:37  啊啾有人想我  阅读(102)  评论(0编辑  收藏  举报