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

题目:返回一个 二维整数 数组中最大子数组的和
要求:1.输入一个二维整型数组,数组里有正数也有负数。
2.二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和。
3.求所有子数组的和的最大值。
设计思想: 上一节课学习了一个一维数组的求最大子数组的和,所以这次二维数组求最大子数组的和,我认为可以演变成一维数组求最大子数组的和。
//1.首先确定最大子数组范围。
//2.把二维数组分成几组有不同的列的数组,演变成一维数组求和的方法。
//3.把分割的几个数组,用上节课一维数组求子数组之和最大值的方法求出子数组的最大值。
//4.利用for循环完成计算。

程序代码:
 #include<iostream>
#include<stdlib.h>
using namespace std;
void main ()
 {
    int x,y,i,j,m=0;
     cout<<"请输入数组的行:";
     cin>>x;
     cout<<"请输入数组的列:";
     cin>>y;
     int *A = new int[x*y];
     cout<<"请按照行和列的格式输入一个数组:"<<endl;
     for(i=0;i<x;i++)
     {
         for(j=0;j<y;j++)
         {
             cin>>A[i*y+j];  
         }
     }
     int sum[100]={0},MaxSum=A[0];
     for(j=0;j<y;j++)      
     {
         for(m=0;m<y;m++)     
         {             for(i=0;i<x;i++)
             {
                 sum[i]=sum[i]+A[i*y+(m+j)];
             }
             int max=0;  
             for(i=0;i<x;i++)
             {
               if(max+sum[i]>sum[i])
                 {
                    max=max+sum[i];
                 }
                 else
                 {
                    max=sum[i];
                }
                 if(max>MaxSum)
                {
                    MaxSum=max;
                 }
             }
         }
         for(i=0;i<x;i++)
         {
             sum[i]=0;
         }
     }
     cout<<"这个数组的最大子数组的和是:"<<MaxSum<<endl;
     system("pause");
 }

结果截图:

总结 :经过本次实验,我发现二人结组完成编程效率十分的高,我们一个人负责程序分析代码编程,另一个人负责复审和代码测试,让我们明白团队合作的重要性,为我们以后的学习工作奠定了良好的基础,让我们认识到了团队合作的重要性,通过这次实验我收获的很多。

组队照片:

猜你喜欢

转载自www.cnblogs.com/sunyangkai/p/9825220.html