首页 > 编程语言 > 详细

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

时间:2015-04-16 13:49:36      阅读:307      评论:0      收藏:0      [点我收藏+]
#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;
}

设计思路:介于第一次与第二次都有类似的问题,于是将两次的代码结合,互相弥补。
后感:前两次的程序都有相同的问题,但是两个程序是互补的,所以将两个程序结合,再出现问题,继续改。。。。。。

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

原文:http://www.cnblogs.com/xiangwo/p/4431741.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!