1. 程式人生 > >返回一個整數數組中最大子數組的和(首尾相連)

返回一個整數數組中最大子數組的和(首尾相連)

.com -a 一個 png letter round 數組元素之和 技術分享 padding

題目:返回一個整數數組中最大子數組的和。
要求:
輸入一個整形數組,數組裏有正數也有負數。
數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。
如果數組A[0]……A[j-1]首尾相鄰,允許A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。
同時返回最大子數組的位置。
求所有子數組的和的最大值。 設計思路:隨機生成一個數組,然後求其最大子數組,從第一個元素開始排列,然後第二元素排列,依次排列,因為要求的是首尾相連所以再次以第個元素為首元素循環n個元素形成一個指定數目的數組,然後開始篩選最大子數組。 程序代碼: #include<iostream>
using namespace std; void main()
{
int length; //數組的個數
int n; //數組變化後的長度
cout<<"請輸入數組元素個數:"<<endl;
cin>>length;
n=2*length; int *a=new int[n]; //定義數組
cout<<"請輸入數組的元素:"<<endl;
for(int i=0;i<length;i++)// for循環依次輸入數組的元素
{
cin>>a[i];
}
int max=a[0]; // 首先定義max並且賦予第一個數組中的元素值
int s=0; //定義s值,s值為數組元素之和並且與max值比較
for( i=0;i<length;i++)
{
s=0;
for(int j=i;j<length+i;j++)
{
s=s+a[j];
if(s>max)
{
max=s;
}
}
a[length+i]=a[i];
}
cout<<endl;
cout<<"最大子數組的和為:"<<endl;
cout<<max<<endl;
}
運行結果: 技術分享圖片 心得體會:C語言基礎太差,好多都是抄別人的代碼,並且思緒很混亂,特別是這次作業首尾相連就是想不出來如何實現,以後要加強這方面的知識。 合作夥伴:吳國慶 照片 技術分享圖片

返回一個整數數組中最大子數組的和(首尾相連)