最大子列和问题/取连续数字使总和最大

引子

这是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;
}

猜你喜欢

转载自blog.csdn.net/beta___/article/details/107915968
今日推荐