zoukankan      html  css  js  c++  java
  • 首尾相接的数组(环)-最大子数组

    一 题目:一个首尾相接的一维整型数组,其中有正有负,求它的最大子数组并返回它的位置。

    结对开发人员:朱少辉,侯涛亮

    二 设计思路:设这个数组为a[n],那么扩大数组范围,使之为a[2*n],将a[0]~a[n-1]的值赋给a[n]-a[2*n-1],那么就相当于从第i个(i=0,1,2..n-1)到第i+n(不包含i+n)个中求最大的子数组,这时可以用到求一维数组(不是环)最大子数组动态规划的思想求解,每求得一个最大值进行比较,最后可求得最大子数组。至于求位置即最大子数组下标,可以附设一个指针j指向最大子数组末尾,指针每回溯一次,就令最大值max减去a[j],直到max值为0,就能求得最大子数组的首部下标。

    三 代码

    #include<iostream>
    #include<cmath>
    using namespace std;
    void main()
    {
        int a[25000],i,j,n,MaxSum,k,m,h,p;
        int f=0;
        int b[10],d[10];
        
        cout<<"请输入数组中数字的个数"<<endl;
        cin>>n;
        cout<<"请输入数组"<<endl;
        for(i=0;i<n;i++)
        {
            cin>>a[i];
        }
        for(i=n;i<2*n;i++)
        {
            a[i]=a[i-n];
        }
        cout<<endl;
        
       
     
      for(i=0;i<n;i++)
      {
          k=0;
          MaxSum=0;
          h=i;
          for(j=i;j<i+n;j++)
          {
            
            k += a[j];
            if(k > MaxSum)
              { 
                  MaxSum = k;
                  h=j;
               }
      
            if(k < 0)
              {
                  k = 0;
              }
          }
           d[i]=h;
           b[i]=MaxSum;
         
      }
      int c=b[0];
        m=0;
        h=0;
      for(i=1;i<n;i++)
      {
          if(c<=b[i])
          {
              c=b[i];
              m=i;
              h=d[i];
          }
      }
       p=h-n+1;
       if(p<=0)
       {   p=n;}
       cout<<"从第"<<m+1<<"个到第"<<p<<""<<endl;
       cout<<"最大子数组为"<<endl;
       for(i=m;i<h+1;i++)
       { cout<<a[i]<<" ";}
       cout<<endl;
       cout<<"最大子数组之和为"<<c<<endl;
      
    }

    四 截图

    五 总结反思

           在这次结对开发中,我和伙伴相互思考设计思路,然后交流意见,达成了设计思路的共识。这样的开发流程,不仅促进了我们之间交流,而且提高了我们的编程能力,可见团队合作的重要性。

  • 相关阅读:
    如何通过命令行窗口查看sqlite数据库文件
    eclipse自动补全的设置
    文本装饰
    注释和特殊符号
    文本装饰
    网页背景
    通过ArcGIS Server admin 查看和删除已注册的 Web Adaptor
    通过 ArcGIS Server Manager 查看已安装的 Web Adaptor
    通过 ArcGIS Server Manager 验证 DataStore
    Windows上安装ArcGIS Enterprise——以 Windows Server 2012 R2上安装 ArcGIS 10.8为例
  • 原文地址:https://www.cnblogs.com/houtaoliang/p/4421532.html
Copyright © 2011-2022 走看看