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

数组结对

时间:2015-03-28 22:58:59      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

1.设计思想:测试数组长度的最大范围,测试每个元素是int32 类型的,将数组的长度设为2,第一个数字输入最大位数的数字,查看结果。

2.出现的问题:

测试1000个元素,

技术分享

测试1000个元素程序没有问题,但是当测试1000000个元素时,程序运行时间过长,时间复杂度过大。

当子数组的和超过最大范围时,结果为0。

技术分享

 3.解决方案:1.如果用户输入超过最大范围,提示用户重新输入或者计算机抛出异常。

                  2.将数组定义为长整型的。

                  3.将结果存入数组。

4.源代码 

//郭婷 信1305 20132916 2015/3/20
#include<iostream>
#include<time.h>
using namespace std;
#define max(a,b) ((a)>(b)?(a):(b))
int maxsum(int a[], int n)
{
    int i;
    int maxsofar = 0;  //maxsofar记录到目前为止的的最大值
    int maxendinghere = 0; //maxendinghere记录从当前位置开始往前几个连续的数的和的最大值
    for (i = 0; i < n; i++)
    {
        maxendinghere = max(maxendinghere + a[i], 0);
        maxsofar = max(maxsofar, maxendinghere);
    }
    return maxsofar;
}
int main()
{
    int n, i;
    cout << "输入数组的个数:";
    cin >> n;
    int *a;
    a = new int[n];
    if (a == NULL )
    {
        cout << "Error: memory could not be allocated";
        return 1;
    }
    //srand((unsigned)time(NULL));
    for (i = 0; i < n; i++)
        cin >> a[i];
    /*for (i = 0; i < n; i++)
    {
        a[i] = rand() % 200 - 100;
        cout << a[i] << " " ;
    }*/
    cout << endl;
    int max=maxsum(a, n);
    cout << "最大子数组的和为:" << max << endl;
    delete[]a;
    return 0;
}

5.总结

原来写完一个程序,总觉得运行成功之后就不会有什么错误,也没有更广、更深的思考,通过这节课的学习,我知道了原来每个程序都有自己所不能涉及的范围,超过了既定的范围就会出现错误,而这些错误往往被我们忽略。所以以后写程序一定要考虑各种情况,可能出现的各种问题以及解决的问题。

结对伙伴:

郭婷 朱慧敏

技术分享

数组结对

标签:

原文地址:http://www.cnblogs.com/gting/p/4374908.html

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