返回一个二维整数数组中最大子数组的和
生活随笔
收集整理的這篇文章主要介紹了
返回一个二维整数数组中最大子数组的和
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
設計思路:
首先定義一個四行四列的二維數組
通過兩個子函數實現,一個求一維最大子數組和,一個求相應列下標二維元素相加和并作比較
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;
} 本次編程由我的搭檔馮金碩和我一起完成,由于編程基礎較差,我們先在網上查找現有程序進行了解,加以借鑒,修改完成。
?
轉載于:https://www.cnblogs.com/grrd17s/p/9826114.html
總結
以上是生活随笔為你收集整理的返回一个二维整数数组中最大子数组的和的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java开发知识之Java中的集合上Li
- 下一篇: git 命令使用技巧