一 题目及要求:
题目:返回一个整数数组中最大子数组的和
要求(新加):①如果数组A[0]...A[j-1]首尾相邻,允许A[i-1]...A[n-1],A[0]...A[j-1]之和最大;②同时返回最大子数组的位置。
二 设计思想:
这个题目我们的思想还是延续以前一维数组的思想,只不过做了一点点改变,比如数字是五个,1,2,3,-1,-1.我们开辟的数组空间则是10个,
将这五个数再存一遍,也就是1,2,3,-1,-1,1,2,3,-1,-1.使用循环,是每次的循环数都数五个,比如第一次循环找出1,2,3,-1,-1中的
连续最大和,第二次循环则找出2,3,-1,-1,1中的最大连续数,以此类推。
三 实验代码
#include<iostream.h> #include<time.h> #include<stdlib.h> int main() { int arry[20]; int start,end,i; long sum,max; cout<<"Please input 10 numbers:"<<endl; for( i=0;i<10;i++) { cin>>arry[i]; arry[i+10]=arry[i]; } max=arry[0]; start=0; end=0; for(int j=0;j<10;j++) { sum=0; for(int k=j;k<10+j;k++) { sum=sum+arry[k]; if(sum>max) { max=sum; start=j+1; end=k+1; } } } cout<<"MAX IS"<<" "<<max<<endl; cout<<"START:"<<"The"<<" "<<start<<"th"<<" "<<"number"<<" "<<"END:"<<"The"<<" "<<end%10<<"th"<<" "<<"number"<<endl; cout<<"These numbers are:"; for(int c=0;c<end-start+1;c++) { cout<<arry[start+c-1]<<" "; } }
四 实验截图
五 实验感想
这次实验我们最大的感想就是,如果一个程序搞懂了,再加一些条件,再做一些改变,都可以从最原始的程序找到突破口,
这次程序我们的主要思想和上次没有什么区别,只做了小改变就成功了,当堂就编了出来,所以也很兴奋,当然和搭档聪明的
脑袋也脱不开关系。