结对开发--循环一维数组求最大子数组的和

结对人员:韩雪东,高扬

一、设计思路

这次编程我们主要是以以前的程序为基础,在此基础上通过改变数组元素的位置,形成新的数组,并通过调用我们之前找最大值的函数,找出每个数组的最大值,然后经过比较求得结果。

二、源代码

// shuzuhuan0327.cpp : Defines the entry point for the console application.
//作者:韩雪东,高扬
//时间:2015/3/27

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "time.h"

int shuchu(int m[],int szcdx,int xhy)//m[]表示要测试的数组,szchx表示数组长度,xhy表示循环条件
{
    int t,p;
    int max,sum;
    //缓存数组赋值
    int c[10];
    int v[10];
    for(t=szcdx-xhy-1;t<szcdx;t++)
    {
        c[t-szcdx+xhy+1]=m[t];
    }
    //循环
    for(t=xhy;t>=0;t--)
    {
        sum=0;
        for(p=0;p<=t;p++)
        {
            sum=sum+c[p];
        }
        v[t]=sum;
    }
    //循环输出最大值
    max=v[0];
    for(t=0;t<xhy+1;t++)
    {
        if(max<=v[t])
        {
            max=v[t];
        }
        printf("%d  ",v[t]);
    }

    return max;
}

int main(int argc, char* argv[])
{
    srand(time(NULL));
    int a[10];
    int b[10];
    for(int j=0;j<10;j++)
    {
        a[j]=rand()%51-25;
        printf(" %d ",a[j]);
    }
    int maxx[10];
    printf("\n");

    for(int i=9;i>=0;i--)
    {
        printf("包含数组中第%d个数在内的所有相邻子数组的和:",10-i);
        maxx[i]=shuchu(a,10,i);
        printf("\n%d\n\n",maxx[i]);
    }
    int maxxx=maxx[0];
    for(i=0;i<10;i++)
    {
        if(maxxx<=maxx[i])
        {
            maxxx=maxx[i];
        }
    }
    printf("\n\n该数组的所有子数组的和的最大值:%d\n\n",maxxx);
    b[0]=maxxx;
    int p;
    for(int t=0;t<9;t++)
    {
        p=a[0];
        for(int q=0;q<9;q++)
        {

            a[q]=a[q+1];

        }
        a[9]=p;
        //int maxx[10];

        for(int i=9;i>=0;i--)
        {
            printf("包含数组中第%d个数在内的所有相邻子数组的和:",10-i);
            maxx[i]=shuchu(a,10,i);
            printf("\n%d\n\n",maxx[i]);
        }
        int maxxx=maxx[0];
        for(i=0;i<10;i++)
        {
            if(maxxx<=maxx[i])
            {
                maxxx=maxx[i];
            }
        }
        printf("\n\n该数组的所有子数组的和的最大值:%d\n\n",maxxx);
        b[t+1]=maxxx;
    }
    int ma;
    ma=b[0];
    for(i=0;i<10;i++)
    {
        if(ma<=b[i])
        {
            ma=b[i];
        }
    }
    printf("\n\n该数组的所有子数组的和的最大值:%d\n\n",ma);
    return 0;

}

三、结果截图

根据数组中元素的个数,生成等数量的数组,分别求出最大字数组的和,在进行比较,求的最大值!

四、心得体会

这次老师又增加了一点难度,但我们感觉并不是很难解决,课上很快就有了思路,不得不说以前编程的可扩展性真的很重要。有了前面的基础,我们考虑的就是如何去利用以前的来完善现在的,这样大大减少了工作量,降低了编程的难度,以后要养成编有可扩展性程序的好习惯。

五、附图

时间: 2024-10-13 07:55:52

结对开发--循环一维数组求最大子数组的和的相关文章

一维数组求最大子数组(解决溢出问题)

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 要求程序必须能处理1000 个元素: 每个元素是int32 类型的: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想 程序在宏里面定义出了数组长度的大小,在长度超过100万的时候程序直接崩溃,其实这并不是因为结果太大导致的数值溢出,而是因为内存溢出,我们的数组是定义在程序内部的,属于局部变量,存放位置在栈上

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

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

环形数组求最大子数组之和

环形数组求最大子数组之和: 实验要求: 随机产生一个整形数组,假设首尾相连为环形,求其相连的字数组的和,并输出子数组的元素. 设计思路: 因为是环形,所以要考虑自设的头尾的情况,在此分为两大类考虑,一种为数组中存在正数情况,一种为全部为负数的情况: 在存在正数的情况中又可分为三种情况,一种为全部为正数的情况,一种为自设的头元素为正数,最后一种为自设的头元素为负数.根据这几种情况分类进行实现. 在实现过程中,对数组元素从头到尾进行遍历,如果遇到正数即用和相加,直到相邻的下一个为负数,即存放目前该最

结对开发--四实现循环二维数组求最大子数组的和

一.实现思路 再上一个实验基础上加上环,我们实现环的思想是每一列依次向此替换,直至替换出能出现的所有的二维数组,再用上一个求最大子数组的方法全部实现 二.实验代码 package com.minirisoft; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.Scanner; public class HuanTwoArray { public stat

结对开发——环形一维数组求最大子数组和

题目:返回一个整数数组中最大子数组的和.要求:(1)输入一个整形数组,数组里有正数也有负数.(2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.(3)如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大.(4)同时返回最大子数组的位置.(5)求所有子数组的和的最大值.要求时间复杂度为O(n).一.设计思想 这个问题的最优解一定是以下两种可能.可能一:最优解没有跨过array[n-1]到array[0],即和非环形数

结对开发,首位相邻的数组求最大子数组

结对人员:张世通 梁世豪 一.题目 返回一维数组中最大子数组的和 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 求所有子数组的和的最大值. 要求时间复杂度为O(n) 二.设计思路 1.在上一次求一维数组最大子数组的问题上,进行拓展,继续使用类似的求和方法 2.通过定义变量start,fin

循环一维数组求最大子数组

题目: 随机出一个一维数组,设该数组为循环数组,求其最大小子数组. 一.设计思路 求最大子数组,就求出最大的连续正子数组. 将数组分为全负和有非负值两种情况.全负求出最大值即可. 在有非负值的情况下,先判断该随机数组的首尾是否相连,即首尾是否都大于等于零.如果首尾相连,则将该一维数组分为首.中.尾三部分,先求出首尾和S1,再求中间最大连续正子数组和S,令S1和S与maxS相比较,求出最大子数组:如果首尾不相连,则直接借鉴前一种情况中部的算法,求最大正子数组S. 二.源代码 1 //刘双渤,刘洪阳

结对开发之二维环数组求最大子数组的和4

结对成员:信1201-1班    黄亚萍 信1201-1班    袁亚姣 一.题目要求 要求:            输入一个二维整形数组,数组里有正数也有负数.            二维数组首尾相接,象个一条首尾相接带子一样.            数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.            求所有子数组的和的最大值.要求时间复杂度为O(n)题目:返回一个二维整数数组中最大子数组的和. 二.设计思路 类似于3,将二维数组转化为一维数组来求最大子数组

循环数组求最大子数组

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想 把数组每一位向后移动一位,最后一位放在第一位.循环多次,每次求其最大子数组,存放到新数组内,比较新数组中最大数,

一维数组求最大子数组的和(首位相邻32位)

返回一个整数数组中最大子数组的和,细化分析:1,在所有以元素tail结尾的子数组中,选出元素和最大的子数组,tail=1,2...n.2,以元素k结尾的和最大的子数组是包含以元素tail-1结尾的和最大的子数组还是就只有元素tail这一个元素,一共有这两个可选状态. 3,在得到以每个元素结尾的和最大的子数组之后,只要取其中最大值就是所有子数组中最大的子数组 4,将数组元素的类型定义为_int32,数组元素随机产生. 代码如下: //李妍 王硕 2016.3.25 #include <iostre