1题目:返回一个整数数组中最大子数组的和。
2要求:
要求程序必须能处理1000 个元素;
每个元素是int32 类型的,出现子数组之和大于整型表示的最大范围会出现什么情况;
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
3思路:
处理1000个元素的问题,将数组的长度设为1000,其中的每一个元素都是随机生成,因为这道题目重点是溢出问题,所以将它们设的值都比较大;
将它们都设为int型,超过表示范围时,系统会自动转化成负值,判断后将显示溢出,计算出所有子数组的和比较找出最大子数组。
4程序代码:
#include "stdafx.h" #include "stdlib.h" int _tmain(int argc, _TCHAR* argv[]) { int i,j,a[1000]; int Sum,Max; printf("随机生成的数组为:\n"); for(j=0;j<1000;j++) { a[j]=rand()+100000000; printf("%d\t",a[j]); } Max = a[0]; for(i=0;i<1000;i++) { Sum = 0; for(j=i;j<1000;j++) { Sum =Sum+ a[j]; if(Sum<=0) {
//printf("溢出!"); Sum=0; } if(Sum > Max) { Max =Sum; } } } return 0; }
5运行截图:
6心得:编程不行c语言基础差,代码几乎是看着园里学长的作业一点一点理解(copy)过来的,不过这一次的实验我们在上课联系的基础上写的,程序自动生成1000个数,但是求得的结果不正确,最后设定如果sum<=0,则输出溢出。
原文:https://www.cnblogs.com/eR1nneungs0rt/p/9786043.html