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

设计思路:

先找到最大数,然后从左往右开始遍历,直至记录到最大子数组。maxsofar记录至输入最大值,maxendinghere记录连续几个数和的最大值。

出现的问题:

 当处理1000个元素时,不知道怎么实施,难道手动实施1000个数组还是怎样,不清楚什么是溢出现象。

解决方案:

c语言中,含n个元素的数组下标从0开始,到n-1结束,而c语言中没有提供数组越界检查的机制,一旦发生数组溢出,就会造成内存的非法访问。

源代码:

 #include<iostream>
using namespace std;
int max(int x,int y)
{
if(x>y)
{
return x;
}
else
{
return y;
}
}
int maxsum(int x[], int n)
{
int i;
int maxsofar = 0;
int maxendinghere = 0;
for (i = 0; i < n; i++)
{
maxendinghere = max(maxendinghere + x[i], 0);
maxsofar = max(maxsofar, maxendinghere);
}
return maxsofar;
}
int main()
{
int n, i=0;
cout<<"Please enter the number of digits:";
cin>>n;
cout<<"Please input array:";
int x[100000]={0};
for(i=0;i<n;i++)
{
cin>>x[i];
}
int max=maxsum(x, n);
cout << "The sum of the largest subarray is:" << max << endl;
return 0;
}
测试:

元素个数为0:

溢出:

处理1300个元素:

我和我的搭档:

 

总结:这次编程我的搭档张子涵主要负责编程,而我主要负责代码复审和代码测试计划。在这个过程中,由于个人能力和所学欠缺,所以编程尤为困难,通过网上参考现有的程序以及阅读课本和老师课件才得以完成。在输入和调试时,要特别注意数组溢出情况,也要注意能处理1000个元素的问题。希望在不断的学习和编程中,提高自己独立编程的能力。

 

 

posted @ 2018-10-14 16:10  肉肉  阅读(114)  评论(0编辑  收藏  举报