最大字段和问题

it2026-04-20  2

写出算法的实现代码,调试运行并得到结果

//最大子段和问题 #include<iostream> #include<vector> using namespace std; //返回最大字段和 int sumOfSubSegment(vector<int>p,int left,int right) { int sum=0; int mid; int leftsum;//左序列子段和 int rightsum;//右序列子段和 int midsum;//最大子段在两边时的和 //序列中只有一个元素 if(left==right) { if(left>0) sum=p[left]; else sum=0; } else { //划分 mid=(left+right)/2; //最大字段在左边 leftsum=sumOfSubSegment(p,left,mid); //最大字段在右边 rightsum=sumOfSubSegment(p,mid+1,right); //最大字段在两边 int leftsumTemp=0;//作为循环求和的中间变量 int leftsum1=0;//接收左边最大子段和 for(int i=mid;i>=left;i--) { leftsumTemp+=p[i]; if(leftsumTemp>leftsum1) leftsum1=leftsumTemp; } int rightsumTemp=0;//作为循环求和的中间变量 int rightsum1=0;//接收右边最大子段和 for(int j=mid+1;j<=right;j++) { rightsumTemp+=p[j]; if(rightsumTemp>rightsum1) rightsum1=rightsumTemp; } midsum=leftsum1+rightsum1; //求出三种情况的最大者 if(leftsum>rightsum) sum=leftsum; else sum=rightsum; if(sum<midsum) sum=midsum; } return sum; } int main() { unsigned size; cout<<"Please input the size of array:"<<endl; cin>>size; //给定序列 vector<int>arr(size); cout<<"Please input your array:"<<endl; for(int i=0;i<size;i++) { cin>>arr[i]; } cout<<"The array is:"<<endl; for(int j=0;j<arr.size();j++) cout<<arr[j]<<" "; cout<<"\nThe largest sum of segment is:"<<sumOfSubSegment(arr,0,arr.size()-1); cout<<"\n--------------------------------"<<endl; cout<<"Hello Boker,nice to meet you.."<<endl; system("pause"); return 0; }

测试结果如下: 后面会把实验报告传上来。。。

最新回复(0)