数组、求和最大的子数组

一、要求

1、定义整型数组、数组长度已知、数组元素随机生成、要求有正有负。

2、求出元素之和最大的子数组,要求元素要连续

3、时间复杂度为O(n)

二、思路

将和最大的子数组放在一个数组中,进行元素的叠加,记录最大值,类似于递归的思想,等加到第i+1次出现最大值减少的的时候,第i次的结果即为最大值。

三、代码

#include<iostream> using namespace std;

#define N  7

void fun(int *p, int n,int &max)

{

 int j,sum =0;

 for (j = n; j >= 0; j--)

 {  

 sum += p[j];  

 if (max < sum)  

 {  

  max = sum;

  }

 }

}

void main()

{

 int a[N], i;

cout << "请随机产生" << N << "个数组元素" << endl;

 for (i = 0; i < N; i++)

  a[i] = rand() % 80 -40;

 for (i = 0; i < N; i++)  

 cout << a[i] << "  ";

 int max = a[0];

 for (i = 0; i < N; i++)   fun(a, i, max);

 cout << "最大的数:" << max << endl;

}

四、截图

四、总结

利用这次编程的机会,熟悉了函数的书写,数组的复习应用等等知识点,当然最大的收获,是这个程序的算法。

psp表格

时间记录日志

 

学习时间 3.21上午在图书馆查阅资料复习相关知识
实现时间 3.21下午在宿舍进行程序的编译   30分钟完成

缺陷记录日志

日期 编号 引入阶段 排除阶段 修改过程 描述  
3.21 1 输入 生成 查阅资料 对宏定义的使用有些错误的地方  
3.21 2 输入 生成 直接修改 输入的时候,因为太注重对宏定义  因而在句尾忘记加上了分号  
3.21 3 输入 生成 直接修改 在输入中文的时候转换了输入法,结果后来输入的时候没有改回来  导致错误。  
             

 

posted @ 2015-03-23 17:23  恨revenge  阅读(524)  评论(1编辑  收藏  举报