码迷,mamicode.com
首页 > 编程语言 > 详细

返回一个二维整数数组中最大子数组的和

时间:2018-10-21 19:37:17      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:下标   大小   ima   com   子数组和   分享图片   上下   http   维数   

 设计思路:

首先定义一个四行四列的二维数组
通过两个子函数实现,一个求一维最大子数组和,一个求相应列下标二维元素相加和并作比较

1.通过上次的一位数组求最大值,可以先求出每一行最大连续子数组的和

2.记下上下边界元素的下标

3.每一行都有一个最大子数组,将它对应的相同列下标的元素相加,得到i个子数组和存到一个一维数组b中

4.通过循环比较数组b中元素的大小,找到最大值sum

#include<stdio.h>
#define M 4
#define N 4
int MAXarr(int m,int n, int array[M][N]);//整合到一维数组
int maxx(int *arr, int len) ;//求最大和
int main()
{
int arr[M][N] = { { -8, 21, 30, 16 }, { 21, 7, -10, 35 }, { 22, 16, 20, -18 }, {12, 75, -9, 6} };
printf( "最大子数组和:");
printf("%d", MAXarr(M, N, arr) );
return 0;
}
int maxx(int *a, int len)
{
int m[100]={0},f=0,x=0;
int Y;
m[x]=0;
while(f<100)
{
if(a[f]>0)
{

m[x]=a[f]+m[x];
f=f+1;
}
else
{

x=x+1;
m[x]=0;
if(a[++f]>0)
{
m[x]=a[f]+m[x];
}
f++;
}
}

Y=m[0];
for(int r=0;r<f;r++)
{
if(m[r]>Y)
{
Y=m[r];
}
r++;
}
return Y;
}

 

int MAXarr(int m,int n, int array[M][N])
{
int i, j, h, max, sum=-100000 ;
int b[100];
for (i = 0; i < n; i++)
{
for (h = i; h < n; h++)
{
for (j = 0; j<n; j++)
{
b[j] += array[h][j];
}
max = maxx(b, j);
if (max>sum)
sum = max;
}
}
return sum;
}

本次编程作业由我和郭树伟共同完成,遇到很多困难,编程基础较差,经过网上查询相关程序,学习借鉴,最终完成作业。

技术分享图片

返回一个二维整数数组中最大子数组的和

标签:下标   大小   ima   com   子数组和   分享图片   上下   http   维数   

原文地址:https://www.cnblogs.com/luelue/p/9826128.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!