zoukankan      html  css  js  c++  java
  • 返回一个整数数组中最大子数组的和

    设计方案:从这个数组左开始遍历,记录遍历到目前为止最大子数组,maxsofar记录到目前为止(从a[0]到a[i])的的最大值,maxendinghere记录从当  前位置开始(即a[j])往前几个连续的数的和的最大值。

    出现的问题: 当处理1000个元素时,不知道怎么实施,难道手动实施1000个数组还是怎样,不清楚什么是溢出现象。

    解决方案:c语言中,含n个元素的数组下标从0开始,到n-1结束,而c语言中没有提供数组越界检查的机制,一旦发生数组溢出,就会造成内存的非法访问。可能导致程序崩溃。

     源代码:

    #include<iostream>
    using namespace std;
    int max(int x,int y)
    {
    if(x>y)
    {
    return x;
    }
    else
    {
    return y;
    }
    }
    int maxsum(int x[], int n)
    {
    int i;
    int maxsofar = 0;
    int maxendinghere = 0;
    for (i = 0; i < n; i++)
    {
    maxendinghere = max(maxendinghere + x[i], 0);
    maxsofar = max(maxsofar, maxendinghere);
    }
    return maxsofar;
    }
    int main()
    {
    int n, i=0;
    cout<<"Please enter the number of digits:";
    cin>>n;
    cout<<"Please input array:";
    int x[100000]={0};
    for(i=0;i<n;i++)
    {
    cin>>x[i];
    }
    int max=maxsum(x, n);
    cout << "The sum of the largest subarray is:" << max << endl;
    return 0;
    }

    结果截图:

    处理1000元素:

    int32:

    数组为0测试:

    常规测试:

    队友:郭树伟

    总结:这次编程我主要负责编写代码,郭树伟主要负责代码复审和代码测试计划。编写代码的工作简直是难上加难,通过参考网上前辈的经验以及参考课本和老师课件,经过反复工作和调试,要特别注意数组溢出情况,也要注意能处理1000个元素的问题,在输入有限个数组时不要机械的按照顺序输入,也要有负数的参与。

  • 相关阅读:
    hdu 4027 Can you answer these queries?
    Codeforces: Empty Triangle
    hdu 3006 The Number of set
    hdu 3645 Code Management System
    进度条作控件代码
    NORMAL
    callback
    三种形状匹配脚本
    移动点动画
    脚本管理
  • 原文地址:https://www.cnblogs.com/amnavov/p/9786581.html
Copyright © 2011-2022 走看看