结队开发5----首尾相连数组

结队成员:范德一,赵永恒

一.题目

返回一个整数数组中最大子数组的和。

要求:

输入一个整形数组,数组里有正数也有负数。

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

如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。

同时返回最大子数组的位置。

求所有子数组的和的最大值。要求时间复杂度为O(n)

二.设计思路

我们在上次实验的基础上,通过在原有的循环体的最外边再添加了一个循环条件,这个循环条件是在第一次循环之后,将数组中每个数的值赋给它前面一个数,这样在最后一次循环的时候就实现了首尾相连。

三.实验代码

  1 #include<iostream.h>
  2 
  3 #include<time.h>
  4 
  5 #include<stdlib.h>
  6 
  7  
  8 
  9 int main()
 10 
 11 {
 12 
 13     int a[10];
 14 
 15     int m;              //m是每组个数
 16 
 17     int *sum=new int[10];
 18 
 19         srand((unsigned)time(NULL));
 20 
 21     cout<<"*********************************"<<endl;
 22 
 23     for(int i=0;i<10;i++)
 24 
 25     {  
 26 
 27         int b;
 28 
 29         b=rand()%2;
 30 
 31         switch (b)
 32 
 33         {
 34 
 35             case 0:
 36 
 37                     a[i]=rand()%100;
 38 
 39                     break;
 40 
 41             case 1:
 42 
 43                     a[i]=-rand()%100;
 44 
 45                     break;
 46 
 47         }
 48 
 49         cout<<a[i]<<"   ";
 50 
 51        /* if((i%10)==4)
 52 
 53         cout<<endl;   */      //每行10个输出,换行
 54 
 55      
 56 
 57     }
 58 
 59      
 60 
 61     cout<<"*********************************"<<endl;
 62 
 63     int he=0;
 64 
 65 for(int t=1;t<11;t++)
 66 
 67 {
 68 
 69     for(m=1;m<11;m++)
 70 
 71     {
 72 
 73         int temp=0;
 74 
 75         for(int n=0;n<m;n++) 
 76 
 77         {
 78 
 79             temp=temp+a[n];
 80 
 81         }
 82 
 83         for(int k=0;k<=(10-m);k++)
 84 
 85         {
 86 
 87             sum[k]=0;
 88 
 89             for(int j=k;j<(k+m);j++)  //a[k]是每组第一个数
 90 
 91             {
 92 
 93                 sum[k]=sum[k]+a[j];
 94 
 95             }
 96 
 97             if(sum[k]>temp)
 98 
 99             {
100 
101                 temp=sum[k];    
102 
103             }   
104 
105         }
106 
107         if(temp>he)
108 
109         {
110 
111             he=temp;
112 
113         }
114 
115  
116 
117     }
118 
119     int temp1=0;
120 
121     temp1=a[0];
122 
123     a[0]=a[1];
124 
125     a[1]=a[2];
126 
127     a[2]=a[3];
128 
129     a[3]=a[4];
130 
131     a[4]=a[5];
132 
133     a[5]=a[6];
134 
135     a[6]=a[7];
136 
137     a[7]=a[8];
138 
139     a[8]=a[9];
140 
141     a[9]=temp1;
142 
143 }
144 
145     cout<<"最大子数组的和为: "<<he<<endl;
146 
147     cout<<"*********************************"<<endl;
148 
149     return 0;
150 
151 }

四.运行截图

技术分享

五.实验感想

这是我们俩一起改进的第五个程序,结对开发确实觉得自己在两个人的合作中成长了不少,赵永恒对于代码的书写有自己的规范,我觉得能够很好的影响到我,在定义一个变量的时候他能将其意思很明确的表示出来,还有他喜欢用函数的思想来解决问题,在主函数外增加函数实现调用的功能,而我比较喜欢在主函数中直接加入条件控制,我觉得他的思想很值得我去学习,我的套路在一个比较大一点的程序中可能就显得很难实现。

六、合照

技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。