1. 程式人生 > >返回一個 二維整數 陣列中最大子陣列的和

返回一個 二維整數 陣列中最大子陣列的和

題目:返回一個 二維整數 陣列中最大子陣列的和
要求: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");
 }

結果截圖:

總結 :經過本次實驗,我發現二人結組完成程式設計效率十分的高,我們一個人負責程式分析程式碼程式設計,另一個人負責複審和程式碼測試,讓我們明白團隊合作的重要性,為我們以後的學習工作奠定了良好的基礎,讓我們認識到了團隊合作的重要性,通過這次實驗我收穫的很多。

組隊照片: