一维数组中求最大子数组的和

题目:

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

要求:

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

  每个元素是int32 类型的;

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

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

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

(我主要负责程序分析,代码编程;张金负责代码复审,代码测试计划。)

 

 

 

 

#include<stdlib.h>
#define AMOUNT 1000
 
int  main()
{
     long  int  arr[AMOUNT];
     long  int  arrCopy[AMOUNT];
     long  int  max[AMOUNT];
     int  i,j;
     int  n;
     int  start,rear;      //子数组的开始,结束
     int  mount=AMOUNT;
     for (i=0;i<mount;i++)
     {
     try
     {
             n= rand ()%2;
             if (n==0)
         {
         arr[i]= rand ();
         arrCopy[i]=arr[i];
         max[i]=arr[i];
         }
         else
         {
         arr[i]=- rand ();
         arrCopy[i]=arr[i];
         max[i]=arr[i];
         }
     }
     catch ( long  int  e)
     {
         cout<< "Long Inter=ger Exception!" <<endl;
     }
     }
     cout<< "Array :" <<endl;
     for (i=0;i<mount;i++)
     {
         cout<<arr[i]<< "  " ;
     if ((i+1)%10==0)
     {
         cout<<endl;
     }
     }
     for (j=0;j<mount-1;j++)
     {
         for (i=j+1;i<mount;i++)
         {
             try
         {  
         arr[j]=arr[j]+arr[i];
         if (max[j]<arr[j])
         {
             max[j]=arr[j];
             rear=i+1;
         }
             }
         catch ( long  int  e)
         {
         cout<< "Long Inter=ger Exception!" <<endl;
         }
         }
     }
     for (i=0;i<mount;i++)
     {
         if (max[0]<max[i])
     {
             max[0]=max[i];
         start=i+1;
     }  
     }
     cout<<endl;
     cout<< "从第" <<start<< "个数" <<arrCopy[start-1]<< "开始" <<endl;
     cout<< "到第" <<rear<< "个数" <<arrCopy[rear-1]<< "结束" <<endl;
     cout<< "子数组和的最大值为: " <<max[0]<<endl;
     return  0;
}
                     
总结:做起来比较吃力,不过有了一定的体会,日后把心思多放在学习上一些,希望我能较快进入状态。

转载于:https://www.cnblogs.com/LJT666/p/4388579.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值