输出一个数组中最大和的子数组并且和不溢出

组员 石鹤李海超

一、题目

输出一个数组中最大和的子数组,数组为int32型,有1000个数,保证最大子数组的和不溢出。

二、设计思想

随机产生一千个数的数组,求最大子数组和的过程中判断是否溢出,如果溢出,则输出溢出。

三、源代码

#include<iostream.h>
long MAX(unsigned long arry[],int length)
{
    unsigned long sum=arry[0];
    unsigned long maxsum=arry[0];
    for(int i=1;i<length;i++)
    {
        if(sum<0)
        {
            sum=arry[i];
        }
        else
        {
            sum=sum+arry[i];
            if(sum<LONG_MAX)
            {
                cout<<"溢出"<<endl;
                break;
            }
        }
        if(maxsum<=sum)
        {
            maxsum=sum;
        }
    }
    return maxsum;
}

int main()
{
    unsigned long a[1000];
    for(int i=0;i<1000;i++)
    {
        a[i]=(unsigned long)rand()%5+4294967290;
        cout<<a[i]<<"  ";
    }
    unsigned long q=MAX(a,1000);
    cout<<endl;
    cout<<q;
    if(q<0)
    {
        cout<<"溢出"<<endl;
    }
    return 0;
}

四、结果截图

五、实验心得

我俩讨论了好久,也没想出溢出后怎么处理,最后只能输出结果溢出。

其他过程中没有什么太大困难,只是把以前程序作了一些改进,希望以后继续进步。

六、相片

时间: 2024-10-03 00:24:02

输出一个数组中最大和的子数组并且和不溢出的相关文章

软件工程结队开发——输出一个数组中最大子数组的和

一.题目及要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为O(n): 二.设计思路 程序分成两个部分: (1):找到数组中所有可能的子数组的和: 先从数组中第一个数开始算起,一直求到与它连续的的所有数的和存入数组son,然后从第二个数开始算起,求与它连续的数的和存入数组,以此类推,直至计算到最后一个数.有n个数据的数组能产生的子数组个数为n

【课堂练习】输出一个数组中的最大值并测试

设计思想 用函数封装求数组最大值的代码,主函数中调用函数实现功能. 源程序代码 #include <iostream> using namespace std; int Largest(int list[],int length) { int i; int max=list[0]; for (i=0;i<length;i++) { if (list[i]>max) { max=list[i]; } } return max; } void main() { int i,Max; i

06返回一个数组中最大和

设计思想: 设数组长maxLength; 设子数组大小(length),依次为1,2,3,4,5........maxLength,并求每一个子数组的和 比较子数组和大小,求最大子数组和: 源代码: import java.util.Vector; public class MaxListNumber { public static int maxList(int []num) { int max=-99; if(num.length<=0) { System.out.println("数

Task 4.5 求二维数组中的最大连通子数组之和

任务:输入一个二维整形数组,数组里有正数也有负数. 求所有子数组的和的最大值.要求时间复杂度为O(n). 1.设计思想:因为用之前的解决子数组最大和的问题的思路一直没能解决这个问题,后来看到同学使用将矩阵转化为图的思路将结果得出了,所以我就沿着这个思路一步一步的分析了一下.开始先将将二维矩阵转换成图的存储形式,当两个相邻的数之间是联通的时,记长度为1,否则就是0:将整个图从每个点都开始遍历一遍,遍历过程中时,当和小于0时断开两点间的路,当和大于最大和时改变最大和的值,取以每个点为起点遍历的和的最

在一个数组中找到连续的子数组最大的乘积

原题目:https://oj.leetcode.com/problems/maximum-product-subarray/ 例如输入[2,3,-2,4]? 符合条件的子数组应该是[2,3],他们的乘积是6 /** * @Author jiangfq * */ package com.test; /** * @author jiangfq * */ public class Solution { /** * @Author jiangfq * */ public static void main

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

设计思想:综合了前面一维数组成环和二维数组求最大子数组的思想. 屏幕截图: : 总结: 把做过的程序封装成一个个的接口,当使用时直接调用即可. 源代码: //jiangzhongxi 2015/4/16#include<iostream>using namespace std;void max(int row,int col){ int ** a=new int*[row+1];    int ** b=new int*[row+1];    int h;//用于每一个一维数组上已经相加元素的

从主数组中删除包含的子数组内容

<script type="text/javascript"> $(function(){ var aa = [1111,2222,3333,4444,5555,6666]; var bb=[1111,2222] var results = $.grep(aa, function(v) { return 0 > $.inArray(v, bb); },false); console.log(results); }) </script>

【c语言】输入一个递增排序的数组的一个旋转,输出旋转数组中的最小元素

//旋转数组的最小数字 //题目:把一个数组最開始的若干个元素搬到数组的末尾.我们称之为数组的旋转. //输入一个递增排序的数组的一个旋转.输出旋转数组中的最小元素. //比如:数组{3.4,5,1,2}为{1,2.3.4.5}的一个旋转,最小元素是1. #include <stdio.h> #include <assert.h> int min_equ(int *src, int left, int right) { int i = 0; int ret = src[left];

定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数;然后按顺序每五个数求出一个平均值,放在另一个数组中并输出

<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> //定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数:然后按顺序每五个数求出一个平均值,放在另一个数组中并输出. var arr = []; var NewArr = []