返回一个整数组中最大子数组的和(首尾相连)
题目:返回一个整数数组中最大子数组的和。 要求: 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 如果数组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语言基础薄弱,但是通过自己努力跟别人帮助,最终完成作业