1. 程式人生 > >11.02-解決連續數組最大子數組和

11.02-解決連續數組最大子數組和

main 進行 clas 最大子數組 同時 cin spa int .com

要求:

   輸入一個整形數組,數組裏有整數也有負數。

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

   如果數組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"); }

技術分享圖片技術分享圖片

11.02-解決連續數組最大子數組和