天天看點

首尾相連最大子數組和(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;
}      
首尾相連最大子數組和(2)

成員:宋雨佳 周雪瑩

設計思路:繼第一次的首尾相連最大子數組和,這是改進版,因為當1 2 3 -1 2時,-1是不能被舍棄的,是以就反其道而行,求最小的子數組和,餘下的便是最大子數組。

後感:還屁颠屁颠的覺得首尾相連簡簡單單就做完了,在幫同學看程式時發現了自己程式的不足,但是這次程式也不是很完善,全負數和全正數沒有考慮,哎呀不想寫了!目前還沒有舉出不符合算法的數組,考慮不完整,以後發現繼續完善