数组中子数组之和最大值

设计思路:

1.用随机数产生一定数量的整数,分别用变量控制随机数的正负和范围。

2.把数组的第一位a[0]设为最大值max和子数组之和sum的初始值,与之后的数目进行比较,如果第二个数大于等与0且sum小于等与0;令sum=第二个数;如果第二个数大于等与0且sum大于0;则sum=+第二个数;如果第二个数小于0且max大于等于0,则sum=0;如果第二个数小于0且max小于于0,则sum=的二个数。最后sum与max选出较大的,就是结果。

 

代码:

#include <iostream>
#include<cmath>
using namespace std;

void main()
{
  int n,m,i,x,s[100], sum, Max;
 cout<<"输入数组的个数和数组中元素的最大范围";
  cin>> n>>m;
  for(i = 0; i < n; ++i)
  {
   x=rand()%2+1;
   const int y=pow(-1.0,x);
   s[i]=y*rand()%m+1;
 
  }
  for( i = 0; i < n; ++i)
  {
   cout<<s[i]<<" ";
  }
 Max = sum = s[0];
  for(i = 1; i < n; ++i)
  {
      if(s[i] >= 0)
      {
        if(sum <= 0)
          sum = s[i];
        else
          sum = sum + s[i];
      }
      else
      {
        if(Max >= 0)
        {
          sum = 0;
        
        }

        else
          sum = s[i];
      }

      if(sum > Max)
        Max = sum;
   
  }
  cout << "max = " << Max << endl;

}

总结:如果用时间复杂度f(n^2)比较容易,但比较难的是把时间复杂度f(n),所以我就上网了搜了一下,找到了简单的算法。所以问题在难,也会有解决的办法,前提就必须有扎实的基础,才能找到更好的办法。

 

 

周活动总结表:

日期听课编写程序阅读课本准本考试日总计
周日 6030 90
周一2003030 260
周二500   500
周三1006030 190
周四40030  430
周五3003030 360
周六 6030 90
周总结1500270150 1920

时间记录日志

日期开始时间结束时间中断时间净时间活动备注
3/2010:1012:0010100听课 
 14:0015:5010100听课 
 20:0021:00 60编程设计西路
3/219:0010:00 60编程

寻找时间复杂度为f(n)的方法

 19:0020:00 60编程 
3/2215:0017:0030120编程 
3/238:009:5010100听课 
 10;0010:45 45写实验报告 

缺陷记录日志:

日期编号类型映入阶段排出阶段修复时间修复缺陷
3/211 编码编译1min 
描述:a没有初始化定义
2 编码编译1min 
描述:漏掉了分号“;”
3 编码编译  
描述:从“double”转换到“const int”,可能丢失数据
3/224 编码编译1min 
描述:漏掉了“}”

转载于:https://www.cnblogs.com/double1/p/4357554.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值