码迷,mamicode.com
首页 > 编程语言 > 详细

首尾相接最大子数组和

时间:2015-04-15 21:24:05      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

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

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

    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];x=j;}  
        else  
            b+=a[j%Nu];  
        if(sum<=b)  
        { sum=b;y=j;}  
        j++;
    } 

    cout<<x<<endl<<y<<endl;
    cout<<"相邻子数组最大和为:"<<sum<<endl;

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

    return 0;
}

技术分享

成员:宋雨佳  周雪莹

设计思路:根据上次做的一维数组最大子数组的和,只要将收尾完成对接就好了,即当加到数组的最后一个数时回到第一个数继续加,现在的问题就是怎样让他停下来!根据多次限制测试得知当首位置小于数组长且子数组长小于数组长即可得到最大子数组和。

后感:由于有上次做的一维数组最大子数组和的基础,就是在选择限制循环条件是浪费了些时间,老师一言点醒。

首尾相接最大子数组和

标签:

原文地址:http://www.cnblogs.com/xiangwo/p/4430115.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!