最大子列和問題/取連續數位使總和最大

2020-08-10 16:34:42

引子

這是PTA上的例題,可自行搜尋練習
在这里插入图片描述

最大子列和問題(C語言版 + 四種方法)

題目

在这里插入图片描述

分析

這道題其實就是引子裡講到的最大子列和問題
唯一需要注意的是,當所有數爲負數時,如-2,-1,-3;輸出的答案應該是-1不是0,因爲題目要求至少要選擇一個

程式碼

#include<bits/stdc++.h>
using namespace std;

int main(){
	int n;//有幾個數要處理 
	cin>>n;
	int ans=INT_MIN,res=0; //ans爲此時答案,res爲加上讀入後的數的總和 
	while(n--){
		int x;
		cin>>x;
		res+=x;
		ans=max(ans,res);//如果res>ans,則把x加入;否則保ans持自己本身 
		if(res<0)	res=0;//因爲當res<0時,就已經沒有取這個值的必要,於是把ans重置爲0 
	}
	cout<<ans;
	return 0;
}