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

要求:输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。

设计思想:

1.用户随机输入10个数作为数组

2.根据二维数组作为子数组最大值的表示方式

3.用递推的方法成功找到子数组最大值

4.成功找到最大值与最大子数组

#include<iostream>
#define N 10
using namespace std;

void main()
{
    int A[N];        //用户输入的数组
    int B[N][N];   //存放所有的数组和
    int i, j, k;
    int sum;
    cout << "输入" << N << "个数:" << endl;
    for (i = 0; i<N; i++)
    {
        cin >> A[i];
    }

    cout << endl;
    for (i = 0; i<N; i++)
    {
        for (j = 0; j<N - i; j++)
        {
            sum = 0;
            for (k = j; k <= j + i; k++)
            {
                sum = sum + A[k];
                B[i][j] = sum;
            }
        }
    }
    //最大子数组的位数
    int max = A[0];
    int x, y;
    for (i = 0; i<N; i++)
    {
        for (j = 0; j<N - i; j++)
        {
            if (max<B[i][j])
            {
                max = B[i][j];
                x = i;
                y = j;
            }
        }
    }
    cout << "最大子数组之和为:" << max << endl;
    cout << "最大子数组为:";
    for (i = 0, j = y; i <= x; i++, j++)
        cout << A[j] << "\t";
}

总结:

本次实验运用到动态规划,需要将Xi-Xi+1的结果作比较然后得出最后结果

结对开发伙伴:朱建颖  http://www.cnblogs.com/zjy666

posted on 2016-03-26 21:11  木头人儿  阅读(230)  评论(1编辑  收藏  举报