结对开发1//求整数数组中的最大连续子数组之和
一、要求:
要求程序必须能处理1000个元素;
每个元素是int32类型,出现子数组之和大于整形表示的范围会出现什么情况?
输入一个整形数组,数组里有正数也有负数;
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和;
求所有子数组的和的最大值,要求时间复杂度为O(n);
二、源程序代码:
#include"stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int MAX(int a, int b)//定义最大值函数
{
if (a > b)
{
return a;
}
else
{
return b;
}
}
int main(void)
{
srand((unsigned)time(NULL)); //本地时间为种子
int n;
printf("please enter the number of arrays\n");
scanf_s("%d", &n);//输入数组的长度n
int *a = (int *)malloc(sizeof(int)*n);//定义任意长度的数组
int *b = (int *)malloc(sizeof(int)*n);
int i;
for (i = 0; i < n; i++)
{
a[i] = rand() % 20000-10000;//随机生成数组
printf("%d ", a[i]);
}
printf("\n");
int maxsum=a[0];
int sum = 0;
for (i = 0; i < n; ++i)
{
if (sum < 0)
{
sum = a[i];
}
else
{
sum += a[i];
}
maxsum = MAX(maxsum, sum);
}
printf("maxsum=%d", maxsum);
getchar();
getchar();
return 0;
}
出现子数组之和大于整形表示的范围时,计算的最后结果一直为整形范围的最大值即2147478255。
因为要求时间复杂度为O(n),所以采用的是线性算法。
三、程序运行结果:
1、运算结果超出整数表示最大范围

2、数组长度为1000时的运行结果

同组人:曹建涛
2018-10-14

浙公网安备 33010602011771号