标签:
一、题目:返回一个二维整数数组中最大子数组的和。
二、要求:
(1)输入一个二维整形数组,数组里有正数也有负数。
(2)二维数组首尾相接,象个一条首尾相接带子一样。
(3)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
(4)求所有子数组的和的最大值。
三、解题思路:
将两个同样的数组首尾相接合并成一个数组,在用以前求二维数组最大子数组的方法求解
四、源代码:
#include<iostream> using namespace std; #include"math.h" void main() { int N=5; int M=5; int n=-10; int m=10; int a[5][10]; int b[10]; int A=0; int Max=0; int MAX=0; cout<<"请输入数组元素:"; for(int i=0;i<N;i++) { for(int j=0;j<M;j++) { cin>>a[i][j]; a[i][M+j]=a[i][j]; } } for(int i=0;i<N;i++) { int h=i; for(int s=0;s<2*M;s++) { b[s]=0; } do { int e=0; int c=0; int d=0; for(int k=0;k<2*M-1;k++) { b[k]=b[k]+a[h][k]; } A=b[0]; Max=b[0]; for(int j=1;j<2*M-1;j++) { if(A<0) { A=b[j]; if(Max<A) { Max=A; e=j; c=j; d=e; } else { e=j; } } else { if((j-d)==M) { break; } if(b[j]<0) { if(Max<A) { Max=A; c=j-1; d=e; } A=A+b[j]; } else { A=A+b[j]; if(Max<A) { Max=A; c=j; d=e; } } } } if(h==0) { MAX=Max; } else if(MAX<Max) { MAX=Max; } h++; }while((h<N)); } cout<<"最大字数组和为:"<<MAX; }
五、任务总结:
每次经过紧张而有趣的编程,看见一个新的程序应运而生,免不了激动万分,通过这次编程,需要整合原先的知识进行归纳总结,合二为一即可,自己还需要更多的努力才能更好地实现程序的编译。
标签:
原文地址:http://www.cnblogs.com/itlangguojie/p/4448827.html