1. 程式人生 > >求一個整數數組中最大子數組的和。

求一個整數數組中最大子數組的和。

元素 alt 最大的 遍歷 長度 stream esp sin ima

遍歷一遍,找連續的正數求和,同時比較求和的大小,最後輸出最大的和就可以。

源代碼:

#include <iostream>
#include<time.h>
using namespace std;
int maxSum(int*a,int n)
{
int sum=0;
int b=0;
for(int i=0;i<n;i++)
{
if(b<0)
b=a[i];
else
b+=a[i];
if(sum<b)
sum=b;
}
return sum;
} int main()
{
int n=1000,k=0;
int*a=new int [n];
for(int i=0;i<n;i++)
{
a[i]=rand()%20-10;
}
for( i=0;i<n;i++)
{
cout<<a[i]<<"";
}
for(i=0;i<n;i++)
{
if(a[i]<0)
{
k++;
}
}
if(n==k)
{
for(int i=1;i<n;i++)
{
k=a[0];
if(a[i]>k)
{
k=a[i];
}
}
cout<<"最大和為:"<<k<<endl;
}
else
{
cout<<"最大和為:"<<maxSum(a,n)<<endl;
} cout<<"輸入數組長度:"<<endl;
cin>>n;
cout<<"請輸入數組元素:"<<endl;
for(i=0;i<n;i++)
{
cin>>a[i];
} cout<<endl;
for( i=0;i<n;i++)
{
if(a[i]<0)
{
k++;
}
}
if(n==k)
{
for(int i=1;i<n;i++)
{
k=a[0];
if(a[i]>k)
{
k=a[i];
}
}
cout<<"最大和為:"<<k<<endl;
}
else
{
cout<<"最大和為:"<<maxSum(a,n)<<endl;
}
return 0;
} 技術分享圖片
技術分享圖片

技術分享圖片

求一個整數數組中最大子數組的和。