zoukankan      html  css  js  c++  java
  • 首尾相连的一位数组最大子数组和

    题目:在原有的一位数组上进行扩展,求首尾相连的最大子数组的和:

    要求: 输入一个一维整形数组,数组里有正数也有负数。

             数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

             求所有子数组的和的最大值。

    结对编程要求: 两人结对完成编程任务。 一人主要负责程序分析,代码编程。

                        一人负责代码复审和代码测试计划。

                       发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)。

    结对开发过程:

        这次的编程开发是基于上次的以为数组,我和我的搭档天使LR恶魔开始了认真的讨论,再结合课堂上的同学讨论,如何能在一维数组原有的基础上,加上首尾相连这个条件,同时降低时间复杂度,这种方法的大概思想是:遍历数组里面的每一个数将第一个数变为最后一个数,具体算法 a[i-1]=a[i],这样又变成了一个新的一维数组,输出每个数组的最大子数组和,然后比较每个输出的和,找出最大的数:

    源代码:

    #include <iostream.h> 
       
    int maxSum(int* a, int n)  //定义一个求一维数组的最大子数组和的方法
    { 
        int sum=0; 
            
        int b=0; 
         
        for(int i=0; i<n; i++) 
        { 
            if(b<0)          
                b=a[i]; 
            else 
                b+=a[i]; 
            if(sum<b) 
                sum=b; 
        } 
        return sum; 
    } 
       
    int main() 
    {   int n,temp,b;
        int  sum=0;
        int i;
        int a1,a2;
        cout<<"请输入数组的元素个数: "<<endl;
        cin>>n;
        cout<<"请输入数组的元素: "<<endl;
        int *a=new int[n];
         
        for( i=0;i<n;i++)
        {cin>>a[i];}
        cout<<"此首尾相连的数组中最大子数组的和有以下几种可能:"<<endl;
        cout<<"第1种排列方式:"<<endl;
        for( i=0;i<n;i++)
        {cout<<a[i]<<"  ";}
        cout<<"最大子数组和为:"<<maxSum(a,n)<<endl;
        a1=maxSum(a,n);
        for(b=1;b<n;b++)
        {
            temp=a[0];
        for(i=1;i<=n;i++)
         { 
            a[i-1]=a[i];
                 
         }
           a[n-1]=temp;
           cout<<"第"<<b+1<<"种排列方式:"<<endl;
           for( i=0;i<n;i++)
           {cout<<a[i]<<"  ";}
           cout<<"最大子数组和为:"<<maxSum(a,n)<<endl;
           if(maxSum(a,n)>=sum)
           {sum=maxSum(a,n);}
        }
          a2=sum;
          cout<<endl;
          if(a1>=a2)
          {cout<<"综上,最大的子数组和为:"<<a1<<endl;}
          else
          {cout<<"综上,最大的子数组和为:"<<a2<<endl;}
         
        return 0; 
    }
    

      

     截图:

    感想:

       合作之所叫做合作是因为它是两个人或更多人之间的事。在今天的一位数组练习题上,我和队友对此题的讨论使得让我俩对问题有了更清晰的认识,让编程顺手而出。

    合作截图:

  • 相关阅读:
    【干货】和你谈谈数据分析报告
    输入整型数组和排序标识
    删除字符串中出现次数最少的字符
    字符串排序
    老男孩Django笔记(非原创)
    Cloakroom
    星际网络
    乘车路线
    渔民的烦恼
    【教程】Microsoft Wi-Fi Direct Virtual关闭方法
  • 原文地址:https://www.cnblogs.com/cainiao1hao/p/4378788.html
Copyright © 2011-2022 走看看