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

返回一個整數迴圈陣列中最大子陣列的和

要求:

       輸入一個整形陣列,數組裡有整數也有負數。

       陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。

       如果陣列A[0]……A[j-1]首尾相鄰,允許A[i-1],……A[n-1],A[0]……A[j-1]之和最大。

       同時返回最大子陣列的位置。

            求所有子陣列的和的最大值。

思路:迴圈兩次,進行排除法,判斷陣列中每個數所構成的最大子陣列,然後將陣列中每個數對應的最大子陣列進行判斷,最後得到這個整數陣列的最大子陣列。

#include<iostream>
#define n 100
using namespace std;
void main()
{
    int a[n], b[n][n];
    int length, i, j, w = 0, p = 0, q = 0, temp, m;
    cout << "輸入整數陣列" << endl;
    for (length = 0;;)
    {
        cin >> a[length];
        length++;
        if (getchar() == '\n')
        {
            break;
        }
    }
    cout << "這個整數陣列的長度為:" << length << endl;
    for (i = 0; i<length; i++)//迴圈兩次,進行排除法,判斷陣列中每個數所構成的最大子陣列
    {
        m = i;
        w = 0;
        j = 0;
        while (j <= length - 1)
        {
            w += a[m];
            b[i][j] = w;
            m++;
            if (m>length - 1)
            {
                m = 0;
            }
            j++;
        }
    }
 
    temp = b[0][0];
    for (i = 0; i<length; i++)//將陣列中每個數對應的最大子陣列進行判斷,最後得到這個整數陣列的最大子陣列
    {
        for (j = 0; j<length; j++)
        {
            if (b[i][j]>temp)
            {
                temp = b[i][j];
                p = i;
                q = j;
            }
        }
    }
 
    cout << "最大子陣列的值為:" << temp << endl;
    cout << "最大子陣列的元素的位置:" << endl;
    i = 0;
    while (i <= q)
    {
        cout << p << "  ";
        p++;
        if (p >= length)
        {
            p = 0;
        }
        i++;
    }
 
    cout << endl;
	system("pause");
}