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

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

要求:
輸入一個整形陣列,數組裡有正數也有負數。
陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。
如果陣列A[0]……A[j-1]首尾相鄰,允許A[i-1]…… A[n-1]A[0]……A[j-1]之和最大。
同時返回最大子陣列的位置。
求所有子陣列的和的最大值。

思路:在上次實驗的基礎上,將第一個數移動到最後,尋找最大子陣列,迴圈此過程,比較所有的最大子陣列,找到最終結果。

成員分工:程式碼編寫:張航    程式碼測試:何自強

#include<iostream>
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 << "最大子陣列的位置6:" << endl; i = 0; while (i <= q) { cout << p << " "; p++; if (p >= length) { p = 0; } i++; } cout << endl; }

 

成果截圖

成員照片