1. 程式人生 > >返回整數陣列中最大子陣列的值(陣列首尾相連)

返回整數陣列中最大子陣列的值(陣列首尾相連)

應王老師要求,返回子陣列的作業又來啦!這次的陣列是首尾相連的

預計時間:兩小時

實際時間:週四上課15分鐘+週日13:20-14:30

先說一下我的想法,之前的作業都是可以直接遍歷整個陣列,因為陣列的長度是一定的,迴圈結束後就可以獲得到所有子陣列。但是這次作業的前提是陣列首尾相連,遍歷整個陣列是無法結束的。所以我可以先想象環狀的陣列斷開,利用二維陣列把斷開陣列的每個數被包含的子陣列再次存放,再去遍歷求子陣列的和,那麼接下來的程式就和之前的一樣了。

 

 

程式:

#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;
}