结对开发4----最大子数组(大数溢出)

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

一.题目:

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

二.要求:

  要求程序必须能处理1000 个元素;

  每个元素是int32 类型的;

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

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

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

三.设计思路

     在上一次的实验中,我们设置的数组的个数能够很好的进行扩展,所以对于第一个要求处理1000个元素比较容易实现;对于第二个要求,我们主要是想确定最大的数到底有多大,即什么时候会发生溢出的问题,当问题出现时程序怎么处理,通过查阅资料,我们最后确定了程序能够处理的最大数的取值,然后通过输出语句提示数组溢出。

四.源代码

  1 #include<iostream.h>
  2 
  3 #include<time.h>
  4 
  5 #include<stdlib.h>
  6 
  7  
  8 
  9 int main()
 10 
 11 {   
 12 
 13  
 14 
 15     srand((unsigned)time(NULL));
 16 
 17  
 18 
 19     int a[1000];
 20 
 21     int m;              //m是每组个数
 22 
 23     int *sum=new int[1000];
 24 
 25     cout<<"*********************************"<<endl;
 26 
 27     for(int i=0;i<1000;i++)
 28 
 29     {  
 30 
 31         int b;
 32 
 33         b=rand()%2;
 34 
 35         switch (b)
 36 
 37         {
 38 
 39             case 0:
 40 
 41                     a[i]=rand()*350;
 42 
 43                     break;
 44 
 45             case 1:
 46 
 47                     a[i]=-rand()*100;
 48 
 49                     break;
 50 
 51         }
 52 
 53         cout<<a[i]<<"   ";
 54 
 55         if((i%10)==9)
 56 
 57         cout<<endl;         //每行10个输出,换行
 58 
 59      
 60 
 61     }
 62 
 63      
 64 
 65     cout<<"*********************************"<<endl;
 66 
 67     int he=0;
 68 
 69     for(m=1;m<1001;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<=(1000-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     if(he>2100000000)
118 
119     {   
120 
121         cout<<"数组溢出!"<<endl;
122 
123     }
124 
125     else
126 
127     {
128 
129         cout<<"最大子数组的和为: "<<he<<endl;
130 
131     }
132 
133     cout<<"*********************************"<<endl;
134 
135     return 0;
136 
137 }

 

五.运行截图

六、感想

    这次实验在随机出现数的那里我们停留了很长时间,主要是不知道rand函数也是有取值范围的。在接组的开发中,我们都有一点自己的想法。最后总结在了一起,尤其是在编程的过程中,我们谁都想往上写一点,一个程序总是在加入自己的设计思路和代码的风格。我觉得一个团队还是应该把风格和规范尽量的一致,才能让团队更好的工作起来。

附:

posted @ 2015-03-29 22:11  憨了个豆先生  阅读(151)  评论(1编辑  收藏  举报