求整数数组中的最大连续子数组之和

一、要求:

  要求程序必须能处理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

  要求程序必须能处理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

猜你喜欢

转载自www.cnblogs.com/LINNNNNNN/p/9786576.html