3.2课堂练习
Posted renhao46707633
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.2课堂练习相关的知识,希望对你有一定的参考价值。
题目:返回一个整数数组中最大子数组的和
要求:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
如果数组A[0]......A[J-1]首尾相邻,允许A[i-1], ......A[n-1],A[0]......A[j-1]之和最大。
同时返回最大子数组的位置。
求所有子数组的和的最大值。
设计思路:在解决这个问题之前看了网上很多的方法,理解到解决本问题的关键就是把环形数组从某处截开,然后从截开出开始遍历数组,遍历的长度不能大于数组长度。其实也相当于先遍历一遍数组,求最大值,然后把第一个数放到最后一个位置再遍历求最大值,直到最后一个元素为第一个位置时。就结束了所有遍历
1 #include<iostream.h> 2 3 void main() 4 { 5 int n,i,c,d,length; 6 cout<<"输入数组元素个数:"<<endl; 7 cin>>length; 8 n=2*length; 9 10 int *a=new int[n]; 11 cout<<"输入数组的元素:"<<endl; 12 for( i=0;i<length;i++) 13 { 14 cin>>a[i]; 15 } 16 int max=a[0]; 17 int s=0; 18 for( i=0;i<length;i++) 19 { 20 s=0; 21 for(int j=i;j<length+i;j++) 22 { 23 s=s+a[j]; 24 if(s>max) 25 { 26 max=s; 27 c=i; 28 d=j; 29 } 30 } 31 a[length+i]=a[i]; 32 } 33 cout<<endl; 34 cout<<"最大子数组的和为:"<<endl; 35 cout<<max<<endl; 36 cout<<"返回位置:"<<endl; 37 cout<<c<<endl; 38 cout<<d<<endl; 39 }
思想感悟:每次遇到问题自己需要了解,多查询,然后就是自己需要自己思考,建立自己的思维。这样才有进步。
以上是关于3.2课堂练习的主要内容,如果未能解决你的问题,请参考以下文章