C语言数组练习——day1

题目:

        实现一个函数get_submax(),对 N 个元素的整型数组,求该数组的各个子数组中,子数组之和的最大值是多少,子数组的起始元素地址,以及子数组长度?这三个结果都通过参数返回。如果有相同最大值的子数组,返回先找到的子数组。例如数组a[7] = {-2, 5, 3, -6, 4, -8, 6};则子数组之和的最大值是8 (即a[1] + a[2])。

代码:

#include<stdio.h>
void max(int *arr1,int *lang1,int **init,int **uninitnt, int *max2);
int main(void)
{
    int arr []={-2,5,3,-6,4,-8,6},lang1,*init,*uninit,max1=0;
    lang1=sizeof(arr)/sizeof(int);
    max(arr,&lang1,&init,&uninit,&max1);
    printf("起地址:%#x,始地址:%#x,长度:%d,max:%d\n",init,uninit,lang1,max1);
    return 0;
}                                                                                                   
/*
*	function: 传入N 个元素的整型数组,求该数组的各个子数组中,子数组之和的*	最大值,子数组的起始元素地址,以及子数组长度。
*	paremeter1:arr1,传入的数组,范围int
*	paremeter2:lang1,传入的数组长度,范围:输入数组具体长度
*	paremeter3:innit,要传回子数组的起元素地址
*	paremeter4:uninit,要传回子数组的末元素地址
*	paremeter5:max2,求该数组的各个子数组中,子数组之和的最大值
*	return:无
*/
void max(int *arr1,int *lang1,int **init,int **uninit,int *max2)
{
    int lang2=*lang1,sum=0,i,j,z,x;
    for(i=1;i<=lang2;i++)//子数组长度
    {
        for(j=0;j<lang2;j++)//各个子数组遍历
        {
            if((j+i)>lang2)
                break;
            for(z=j,x=j+i;z<x;z++)//单个子数组遍历的总值
                sum+=arr1[z];
            if(sum>*max2)//挑出最大值子数组
            {
                *lang1=i;
                *init=&arr1[j];
                *uninit=&arr1[j+i];
                *max2=sum;
            }
            sum=0;
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值