数组题目小计(1)

终于快过完二柱的四则运算题目了,数组起头了

题目:返回一个整数数组中最大子数组的和。 要求: 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n) 发表一篇博客文章讲述设计思想,出现的问题,可能的解决方案(多选)、源代码、结果截图、总结。

 

吸取教训,先整理好思路再进行编写

     首先想到了很笨的方法,定义一个数组a用来存放子数组含1,2,3...个元素时的最大值,然后分别计算从a[0]开始元素子数组含(1~数组最大值)的和,再在数组a中进行比较找出最大值,后来又想出一个看似稍微简化一点的方法:依次找到数组的最大元素、次大元素...最小元素,找到的同时进行子数组的求和,和的最大值再放入数组a中(经过检验好像比一开始想出来的方法难),时间复杂度先不考虑(已经嵌套好几层括号o(╯□╰)o)

     ***************************************************************************************************************************

嵌套关系有点混乱了,能出来一个元素和两个元素子数组的和最大值,改了又出不来了,附上代码,脑袋已经乱了,明天理清楚继续,好像错误是未初始化,而且少了东西,

~~~~(>_<)~~~~

#include<iostream>
using namespace std;
int Max(int a[100], int i, int num);
int main()
{
    cout << "请输入数组元素个数:";
    int num;
    cin >> num;
    cout << "请输入数组元素:";
    int array_[100],i,j,far,k=0;
    int a[100];
    for (i = 0; i < num; i++)
        cin >> array_[i];
    //从前到后依次求子数组和的最大值
    for (i = 0; i < num; i++)    
    {
        for (far = 0; far < num - i; far++)    //定义到计算元素的距离(含几个元素的子数组)
        {
            for (j = i; j < i + far; j++)    //加的次数
            {
                int m=0;
                m = m + array_[j];    //m存放子数组的和
                int a[100];
            }
        }
    }
    cout << Max(a, k, i*i+i) << " ";
    return 0;
}
//求数组最大值
int Max(int a[100],int i,int num)
{
    int M=a[0];
    for (i = 0; i < num; i++)
    {
        if (a[i] > M)
            M = a[i];
    }
    return M;
}

 

posted @ 2016-03-21 21:20  四季信风  阅读(240)  评论(2编辑  收藏  举报