cpp6.1
题目: 最大子数组和
题目描述
给定一个数组a[0,...,n-1],求其最大子数组(长度>=1)和
输入描述
第一行一个整数n(1<=n<=5000),然后依次输入n个整数(每个整数范围[-5000, 5000])
输出描述
输出一个整数表示最大子数组和
样例输入
5 1 -1 1 1 -1
样例输出
2
最大子数组和:
理解一下概念,连续,最大数。
Ans:
1.从第一个正数开始计算;
2.后面还是正数就加到sum里;
3.直到出现负数,记录第一个max1;
4.对之后出现的所有负数求和,如果大于max1,即计算到这里成负的了,那就舍掉这一段,只保留还留下的max1,然后重新进行1;
5.如果还是正的,就继续1步骤;
6.最后比较所有的max。
这算是一个比较线性的思维方式吧;
//cpp6.1
#include <iostream>
#include <iomanip>
#include <string.h>
using namespace std;
int main()
{
int n;//输入要输入的数组数;
cin >> n;
int* num = new int;
int* max = new int;//会有很多个max
int sum = 0;//在计算的数据和
int x = 0;
Again:
cin >> *num;
do
{
if (*num >= 0)
{
sum += *num++;
n--;
}
else
{
*max++ = sum;
x++;
sum += *num++;
n--;