码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-03-31 00:39:09      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

一.题目:

  在原有的一位数组上进行扩展,求首尾相连的最大子数组的和:

 

二.要求:

     1)输入一个一维整形数组,数组里有正数也有负数。

     2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

    3) 求所有子数组的和的最大值。

    4) 结对编程要求: 两人结对完成编程任务。 一人主要负责程序分析,一人负责代码编程代码复审和代码测试计划。发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)。

三.组员:孔维春 崔鹏勃

四.思路分析:

    这次的编程开发是基于上次的一维数组,我和崔鹏勃(id:春宵一刻)开始了认真的讨论,再结合课堂上的同学讨论,如何能在一维数组原有的基础上,加上首尾相连这个条件,同时降低时间复杂度,这种方法的大概思想是:遍历数组里面的每一个数将第一个数变为最后一个数,具体算法为 a[i-1]=a[i],这样又变成了一个新的一维数组,输出每个数组的最大子数组和,然后比较每个输出的和,找出最大的数。

五.源代码:

#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}
#include<iostream>
using namespace std;
int maxSum(int* a, int n)  //定义一个求一维数组的最大子数组和的方法
{
    int sum = 0;

    int b = 0;

    for (int i = 0; i<n; i++)
    {
        if (b<0)
            b = a[i];
        else
            b += a[i];
        if (sum<b)
            sum = b;
    }
    return sum;
}

int main()
{
    int n, temp, b;
    int  sum = 0;
    int i;
    int a1, a2;
    cout << "请输入数组长度: " << endl;
    cin >> n;
    cout << "请输入数组的每个元素(空格隔开): " << endl;
    int *a = new int[n];

    for (i = 0; i<n; i++)
    {
        cin >> a[i];
    }
    cout << "此首尾相连的数组中最大子数组的和有以下几种情况:" << endl;
    cout << "第1种方式:" << endl;
    for (i = 0; i<n; i++)
    {
        cout << a[i] << "  ";
    }
    cout << "所求最大子数组和为:" << maxSum(a, n) << endl;
    a1 = maxSum(a, n);
    for (b = 1; b<n; b++)
    {
        temp = a[0];
        for (i = 1; i <= n; i++)
        {
            a[i - 1] = a[i];

        }
        a[n - 1] = temp;
        cout << "" << b + 1 << "种方式:" << endl;
        for (i = 0; i<n; i++)
        {
            cout << a[i] << "  ";
        }
        cout << "最大子数组和为:" << maxSum(a, n) << endl;
        if (maxSum(a, n) >= sum)
        {
            sum = maxSum(a, n);
        }
    }
    a2 = sum;
    cout << endl;
    if (a1 >= a2)
    {
        cout << "综上所述,最大的子数组和为:" << a1 << endl;
    }
    else
    {
        cout << "综上所述,最大的子数组和为:" << a2 << endl;
    }
    system("pause");
    return 0;    
}

六.结果截图:技术分享

七.总结:

    这次开发增强了我的团队合作能力,受益匪浅。

技术分享

 

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

标签:

原文地址:http://www.cnblogs.com/littilsaber/p/4379411.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!