zoukankan      html  css  js  c++  java
  • 首尾相接最大子数组和

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

    成员:宋雨佳  周雪莹

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

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

  • 相关阅读:
    购物菜单
    数据库
    增删改查
    页面交互
    计算器
    2020.9.21
    团队-团队编程项目中国象棋-项目总结
    团队-团队编程项目作业名称-最终程序
    课后作业-阅读任务-阅读提问-4
    《20171130-构建之法:现代软件工程-阅读笔记》
  • 原文地址:https://www.cnblogs.com/xiangwo/p/4430115.html
Copyright © 2011-2022 走看看