最大子数组程序二

一、设计思路:通过输入数组的长度和数组中数的取值范围,产生一个随机数组,并用随机数决定正负号。然后在一次循环中,将数组中的数依次相加,若相加大于0则继续相加,若相加小于0则舍弃之前的数,重新开始相加,并且在循环中记录相加产生的最大的数,即为最大子数组的和。

二、代码:#include<iostream>
using namespace std;
 
void main()
{
    int i,x,y,z;
    int s,sum,head,end,h,e;
    cout<<"请输入数组的长度:";
    cin>>x;
    cout<<"请输入数组的取值范围:";
    cin>>z;
    int *a=new int[x];

if(x==0)

{

cout<<"错误"<<endl;

return 0;

}
 
    for(i=0;i<x;i++)
    {
        a[i]=rand()%z;
        y=rand()%2;
        if(y==0)
        {
            a[i]=-a[i];
        }
    }
    sum=0;
    s=0;
    e=0;
    h=0;
 
    for(i=0;i<x;i++)
    {
        s+=a[i];
        if(s>0)
        {
            e++;
        }
        else
        {
            s=0;
            h=i+1;
            e++;
        }
        if(s>sum)
        {
            sum=s;
            head=h;
            end=e;
        }
    }
    cout<<"最大子数组的和为:"<<sum<<endl;
    delete a;
 
}

三、结果截图:

四、代码测试及出现的问题

1、当输入数组的长度为0或为负时,程序无法运行。

2、当随机数之和不在int32的范围之内时,只显示最大数

五、解决方法

1、对输入的数用if语句判断,若不符合条件,直接终止程序

2、对于随机数之和较大或较小无法显示,应通过调整随机数范围缩小随机数之和

六、总结

这次对原来程序的测试对我有很大启发,尤其是对数的范围的判定和对输入的数的约束,让我在以后的程序开发中能够注意到一些微小的细节,避免出现较大的失误。

七、团队开发小组成员:杜永超、郭昊

团队照:

时间: 2024-08-10 02:09:56

最大子数组程序二的相关文章

一维数组头尾相连求最大子数组

题目: 返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 求所有子数组的和的最大值.要求时间复杂度为O(n). 1. 设计思想: 因为已经写过了一维数组的求最大子数组程序.所以只是在原程序上进行修改.首先产生随机数数组,然后进行计算,因为要求时间复杂度

返回一个二维整数数组中最大子数组的和的小程序

要求: 1.输入一个二维整形数组主,数组里有正数也有负数. 2.二维数组中连续的一个子矩阵组成一个子矩阵组成一个子数组,每个子数组都有一个和. 思路:根据上次写的找一维数组中最大子数组的经验,不妨把二维数组转化为一维数组的形式先进行求和,再比较,选出最大的子数组.首先以第一行为上界,依次向下确定数组的最大范围,把最大子数组按照一列有几个数,分成几种不同的行,对于产生数组的,进行一维数组求和计算并找出最大值.然后将上界下调一行,从第二行开始,依次向下确定数组最大范围,重复以上步骤. 代码如下: #

环形二维数组最大子数组的和

设计思路: 因为之前做过二维数组的和环形一维数组的,所以第一感觉就是能不能把这两种整改一下结合起来,所以采用的做法就是将二维环形变化为一维环形,在此采用的方法是从第一行开始,第一行计算出最大子数组,然后第一行和第二行相加为一维计算最大子数组,然后第一行.第二行和第三行,以此类推,最后将各子数组的最大值进行比较,得到最大的即为子数组和的最大值. 实验代码: //环形一维数组求最大子数组 package erwei; public class oneArray { private int i; pu

返回一个首尾相接的二维整数数组中最大子数组的和

一.题目:返回一个二维整数数组中最大子数组的和. 二.要求: (1)输入一个二维整形数组,数组里有正数也有负数. (2)二维数组首尾相接,象个一条首尾相接带子一样. (3)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (4)求所有子数组的和的最大值. 三.解题思路: 将两个同样的数组首尾相接合并成一个数组,在用以前求二维数组最大子数组的方法求解 四.源代码: #include<iostream> using namespace std; #include"math

《团队开发项目之三二维数组的最大子数组之和》

设计思想:按列或按行的次序依次进行计算每个以列或行的次序为基准的每种情况下的每个子矩阵的和,然后再依次进行比较每个子矩阵的和,取出最大的一个即是最大字数组之和: 源代码: //二维数组的最大子数组之和 //李敏,Apr 8th #include<iostream> #include<time.h> using namespace std; void main() { int m,n,a[100][100],k,t,c,i,j,z; int maxsum,sum[100],max=0

环状二维数组最大子数组和

一.题目: 返回一个二维整数数组中最大子数组的和.二.要求:    输入一个二维整形数组,数组里有正数也有负数.二维数组首尾相接,象个一条首尾相接带子一样.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n). 三.成员 编写程序者:岳竞一 协同者:付东 四.编程思路 首先,根据一维数组原理,可以先求出每个行数组的最大子数组和. 然后,将二维3行数组分写成5行子数组的数组,3,4行为1,2和2,3行一起的子数组,5行为,1,2,3行的

求二维数组中最大子数组的和

一.题目: 返回一个二维整数数组中最大子数组的和. 要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二:结对编程要求: 两人结对完成编程任务. 一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划. 发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照). 三:设计思路: 将二维数组的每行轮番逐次相加(包括单行)后看成一维数组,利用求

二维数组的最大子数组之和

一.设计思路:与求一维数组的最大子数组类似,将二维数组转化为一维数组来计算,也是通过遍历的方式将一个子矩阵与上几个子矩阵相加如果小于0则舍去这个子矩阵,按此方法计算从这个子矩阵以后的矩阵,求得遍历中最大值,即为最大子数组之和. 二.代码: package soft_third_test; public class test { static int maxSum(int p[][],int startLine,int endLine,int n){ int ans=p[endLine][1]-p

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

题目:返回一个二维整数数组中最大子数组的和.要求:输入一个二维整形数组,数组里有正数也有负数.      二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和.      求所有子数组的和的最大值.要求时间复杂度为O(n). 结对编程要求:两人结对完成编程任务.              一人主要负责程序分析,代码编程.              一人负责代码复审和代码测试计划.              发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照)