一、要求
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 | 输入 | 生成 | 直接修改 | 在输入中文的时候转换了输入法,结果后来输入的时候没有改回来 导致错误。 | |