代码改变世界

返回整型数组子数组和的最大值

2014-03-10 16:25  铿锵玫瑰—叶  阅读(366)  评论(0编辑  收藏  举报

结对组员:     刘静(20092532)

                       解凤娇(20112878)

                       王洪叶(20112886)

        项目:定义一个整型数组,返回该数组中子数组和的最大值!

        从键盘接收到数组的数据之后,调用最大值函数 maxSum(int arr[],int length),求子函数的最大值。

        要想获得子函数最大值,首先进行数组的遍历,在遍历起初,对最大值进行初始化为数组的第一个元素,每次遍历,求得该子数组的和,并将此和与最大值进行比较,若小于

最大值,则进行下一次的遍历,直到结束。此处用到三个for循环,来进行次数的控制。第一个 for(i = 0; i <length; i++),用来完成所有数组的循环,第二个for(j = i; j

<length; j++)用来表示从第几个元素开始,寻找子数组,第三个 for( k = i; k <= j; k++) ,用来获取每个子数组的和,等到遍历完全结束,返回最大值输出。

编写前准备情况:

                                                         

       测试数据:

       (1)、输入数组元素:3 6 2 8 6

                 应得结果:25

       (2)、输入数组元素:-2 7 9 6 3

                 应得结果:25

       (3)、输入数组元素:-4 -5 -9 -5 -3

                 应得结果:-3

       (4)、输入数组元素:1 -2 3 10 -4 7 2 -5

                 应得结果:18

//对于一个整型数组,求其最大子数组和
//解凤娇、王洪叶、刘静共同完成
//2014.03.10
#include<stdio.h>
#include<stdlib.h>
#define N 1000
/******获取最大值子函数********/
int maxSum(int arr[],int length)
{ 
    
    int i;
    int j;
    int k;
    int max= arr[0]; //最大值初始化
    int sum=0; //每次遍历的和初始化为0    
    if(arr==NULL||length<=0)//异常捕捉,数组为空的错误
    {
        printf("没有可执行数据!");
    }
    for(i = 0; i <length; i++)//循环遍历数组元素
    {  
        for(j = i; j <length; j++)//判断从第几个元素开始遍历
        {  
            for( k = i; k <= j; k++) 
            {  
                sum += arr[k]; //求和
            }  
            if(sum > max)//与最大值进行比较
            {
                max = sum;
            }
            sum=0; 
        }  
    }  
    return max; 
}   
void main()
{
    int a[N];
    int num;
    int i;
    int k=1;
    do
    {
        printf("输入数组个数:\n");//初始化数组个数
        scanf("%d",&num);
        printf("输入%d个数,以空格区分:\n",num);//数组元素初始化
        for(i=0;i<num;i++)
        {
            scanf("%d",&a[i]);
        }
        printf("最大子数组的和为:%d",maxSum(a,num));//调用子函数,返回最大值
        printf("\n\n");
        printf(" 1、继续   0、退出\n");
        scanf("%d",&k);
    }while(k!=0);
    
}