• 结对开发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函数也是有取值范围的。在接组的开发中,我们都有一点自己的想法。最后总结在了一起,尤其是在编程的过程中,我们谁都想往上写一点,一个程序总是在加入自己的设计思路和代码的风格。我觉得一个团队还是应该把风格和规范尽量的一致,才能让团队更好的工作起来。

    附:

  • 相关阅读:
    Delphi数据库处理
    delphi 递归的方法
    C#中StringBuilder用法以及和String的区别
    算法导论12.2节习题解答
    算法导论9.11习题解答(二叉树)
    算法导论10.15习题解答(deque实现源码)
    算法导论9.39习题解答(寻找中位数)
    算法导论84习题解答
    算法导论10.17习题解答(用两个队列实现一个栈)
    算法导论10.27习题解答(单链表逆转)
  • 原文地址:https://www.cnblogs.com/fan123/p/4376537.html
Copyright © 2020-2023  润新知