首页 > 编程语言 > 详细

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

时间:2015-03-29 23:20:39      阅读:231      评论:0      收藏:0      [点我收藏+]

结对人员:韩雪东,高扬

一、设计思路

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

二、源代码

// 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;
    
}

三、结果截图

技术分享

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

四、心得体会

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

五、附图

技术分享

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

原文:http://www.cnblogs.com/gaoyang110/p/4376580.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!