1. 程式人生 > 實用技巧 >最大連續子段和

最大連續子段和

給出一個數列(元素個數不多於100),數列元素均為負整數、正整數、0。請找出數列中的一個連續子數列,使得這個子數列中包含的所有元素之和最大,在和最大的前提下還要求該子數列包含的元素個數最多,並輸出這個最大和以及該連續子數列中元素的個數。
例如數列為4,-5,3,2,4時,輸出9和3;數列為1 2 3 -5 0 7 8時,輸出16和7。

輸入樣例:
7
1 2 3 -5 0 7 8
輸出樣例:
16 7

這題很簡單 上AC程式碼 提示都在程式碼裡面了

#include <iostream>
using namespace std; 
int a[101];
int n, i, ans, len, tmp, beg;
int main() { cin >> n; for (i = 1; i <= n; i++) cin >> a[i]; tmp = 0; ans = 0; len = 0; beg = 0; //為了便於後續統計元素個數,初始值為0 for (i = 1; i <= n; i++) { if (tmp + a[i] > ans) { ans = tmp + a[i]; len = i - beg; }
//如果加上第 i 元素的當前子數列之和等於之前找到的最大元素之和 //且當前子數列元素個數大於之前找到的元素個數 else if (tmp + a[i] == ans && i - beg > len) len = i - beg; if (tmp + a[i] < 0) //如果元素之和小於0,捨棄這個連續子數列 { beg = 1; //記錄下標 i tmp = 0; } else //否則當前連續子數列繼續統計元素之和
{ tmp=tmp+a[i]; } } cout << ans << " " << len << endl; return 0; }

Copyright 2020 © IamXuWu All rights reserved.