1. 程式人生 > >返回最大陣列練習

返回最大陣列練習

總結
本次的課堂作業是返回一個二維整數陣列中最大子陣列的和,從題目上講和上一次的課堂作業大同小異,基本上是相同的,也是求取所有子陣列的和之後進行比較求出最大值,即為最終的返回值。由於這一次的程式和上一次的程式大同小異,因此按照上一個程式的思路結合這一次程式中所出現的新問題新困難,通過討論與上網搜尋資料的方式進行了程式設計。這次的編寫程式的重點步驟為以下三處:

1)輸入一個二維整形陣列,要求數組裡有正數也有負數。即要求程式中既能處理正數也能處理負數。

2)二維陣列中連續的一個子矩陣組成一個子陣列,每個子陣列都有一個和。意思即為在所想要執行的二維陣列中每一個連續的子矩陣組為一個子陣列,並且計算得出每一個子陣列的和,這一步驟應該是整個程式的核心了,任務也是比較重的,最後通過交流以及搜尋資料解決了這一困難。

3)求所有子陣列的和的最大值。將上一步驟中所求出的所有子陣列的和比較得出所有子陣列的最大值即為程式的最終返回值。完成這一步驟的程式以後整個程式即為完成了,之後進行執行除錯成功。

 #include<iostream>
using namespace std;
void main ()
{
    int a,b,c,d,e=0,A[100][100];
 
    cout<<"輸入矩陣的行()和列";
    cin>>a>>b;
    if(a>100||b>100)
    {
        cout<<"請重新輸入:

";
        cin>>a>>b;
    }
    for(c=0;c<a;c++)
    {
        for(d=0;d<b;d++)
        {
            cin>>A[c][d];
        }
 
    }
    int sum[100]={0},max=0,result=A[0][0];
 
    for(c=0;c<a;c++)
    {
        while(e+c<a)
        {
            for(d=0;d<b;d++)
            {
                sum[d]=sum[d]+A[e+c][d];
 
            }
            max=0;
            for(d=0;d<b;d++)
            {
                if(max+sum[d]>sum[d])
                {
                    max=max+sum[d];
                }
                else
                {
                    max=sum[d];
                }
                if(max>result)
                {
                    result=max;
                }
            }
            e++;
        }
        e=0;
        for(d=0;d<b;d++)
        {
            sum[d]=0;
        }
 
    }
 
    cout<<result;