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课堂练习的主要内容,如果未能解决你的问题,请参考以下文章

关于本次课堂代码的练习

课堂练习--找水王

课堂练习四

课堂练习-找水王

课堂练习

课堂练习(水王扩展)