码迷,mamicode.com
首页 > 其他好文 > 详细

3.2课堂练习

时间:2018-11-04 19:19:59      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:iostream   pre   cin   元素   style   长度   第一个   大于   end   

题目:返回一个整数数组中最大子数组的和

要求:

输入一个整形数组,数组里有正数也有负数。

数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

如果数组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课堂练习

标签:iostream   pre   cin   元素   style   长度   第一个   大于   end   

原文地址:https://www.cnblogs.com/renhao46707633/p/9904516.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!