首尾相连最大子数组和(3)
#include<iostream> using namespace std; #define Nu 5 int main() { int a[Nu]={1,2,3,-1,4}; cout<<"随机产生数组为:"; for(int i=0;i<Nu;i++) cout<<a[i]<<" "; cout<<endl; int sum=a[0],b=a[0],x=0,y=0; int j=1; while((j-x<Nu)&&x<Nu) { if(b>=0) { b=a[j%Nu]; if(j<Nu) x=j; else break; } else b+=a[j%Nu]; if(sum>=b) { sum=b;y=j;} j++; } sum=0; for(int i=y+1;i<x+Nu;i++) sum+=a[i%Nu]; int z=y%Nu; if(x>z) { j=1;sum=a[0];b=a[0];x=0;y=0; while(j<Nu) { if(b<0) { b=a[j%Nu];x=j;} else b+=a[j%Nu]; if(sum<=b) { sum=b;y=j;} j++; } cout<<x<<endl<<y<<endl; cout<<"相应子数组为:"; for(int i=x;i<=y;i++) cout<<a[i]<<" "; cout<<endl; } else { cout<<x<<endl<<y<<endl; cout<<"相应子数组为:"; for(int i=y+1;i<x+Nu;i++) cout<<a[i%Nu]<<" "; cout<<endl; } cout<<"相邻子数组最大和为:"<<sum<<endl; return 0; }
设计思路:介于第一次与第二次都有类似的问题,于是将两次的代码结合,互相弥补。
后感:前两次的程序都有相同的问题,但是两个程序是互补的,所以将两个程序结合,再出现问题,继续改。。。。。。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。