数组02

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

二、要求:输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

  如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。

  同时返回最大子数组的位置。 求所有子数组的和的最大值。

三、设计思想

  在上一次实验的基础上,利用动态数组,为满足首尾相连,在计算一次之后,要把该数放在数组的最后边,这样循环遍历,最后求得最大数组之和及数组数值所在的位置。在定义数组array时,使用了指针的动态空间申请,以此来储存数组中的元素,并在最后释放了申请的空间,避免资源浪费。

四、源代码 

 1 //数组02
 2 //胡浩特、朱子嘉 2016/3/27
 3
 4 #include <iostream>
 5 using namespace std;
 6
 7 void Arr_Maxsum(int arr[], int length, int first, int last)
 8 {
 9     int count = 0;
10     int result = arr[0];
11     int sum = arr[0];//初始化
12     for (int i = 0; i<length; i++)
13     {
14         sum = 0;
15         for (int j = i; j<length + i; j++)
16         {
17             sum += arr[j];
18             if (sum>result)
19             {
20                 result = sum;
21                 first = i;
22                 last = j;
23             }
24         }
25         arr[length + i] = arr[i];
26     }
27     if (last >= length)
28     {
29         cout << "最大子数组起始位置为:" << first + 1 << endl;
30         cout << "最大子数组终止位置为:" << last - length + 1 << endl;
31     }
32     else
33     {
34         cout << "最大子数组起始位置为:" << first + 1 << endl;
35         cout << "最大子数组终止位置为:" << last + 1 << endl;
36     }
37     cout << "最大子数组为:" << endl;
38     for (int m = first; m <= last; m++)
39     {
40         cout << arr[m] << "  ";
41     }
42     cout << endl;
43     cout << "最大子数组的和为:" << endl;
44     cout << result << endl;
45 }
46 int main()
47 {
48     int num, length, first, last;
49     first = 0;
50     last = 0;
51     cout << "请输入数组元素个数:";
52     cin >> length;//数组长度
53     num = 2 * length;
54     int * arr = new int [num];//申请空间
55     cout << "请输入数组数据:" << endl;
56     for (int i = 0; i<length; i++)
57     {
58         cin >> arr[i];
59     }
60     cout << endl;
61     Arr_Maxsum(arr, length, first, last);
62     delete [] arr;//释放空间
63     return 0;
64 }

五、实验结果

  

六、实验总结

  本次实验刚开始的时候设计思路还不太明确,想使用链表的方法实现,但是对数据结构中的链表知识掌握不太牢固,不知道如何使用,后来,经过一番讨论与思考决定还是利用上次的动态数组完成实现。在编程过程中的一些细节知识还把握的不好,浪费了一定的时间:思考如何将链式的数组转化成为环式的数组,然后再看成链式的数组,来查找最大子数组,算法修改了很多次后才完成了实验的要求,通过本次实验我们俩都收获了宝贵的经验,也增强了自己对于coding的信心。

时间: 2024-08-10 09:54:59

数组02的相关文章

数组-02. 打印杨辉三角(20)

1 #include<iostream> 2 #include<iomanip> 3 using namespace std; 4 int main(){ 5 int a[10][10]; 6 int i,j,n; 7 cin>>n; 8 for(i=0;i<n;++i){ 9 a[i][0]=1; 10 a[i][i]=1; 11 } 12 for(i=2;i<n;++i) 13 for(j=1;j<i;j++) 14 a[i][j]=a[i-1][

数组-02. 打印杨辉三角

1 /* 2 * Main.c 3 * E2-数组-02. 打印杨辉三角 4 * Created on: 2014年8月20日 5 * Author: Boomkeeper 6 ********测试通过***** 7 */ 8 9 #include <stdio.h> 10 11 int main(void){ 12 13 int pascalTriangle[10][10]; 14 int N;//题目中的N 15 16 scanf("%d",&N); 17 //

求最大子数组02

题目:整数数组中最大子数组的和 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1],…… A[n-1],A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 求所有子数组的和的最大值. 这次任务多了一个要求就是这个数组是环形的, 也就是可以从A[i-1],…… A[n-1],A[0],A[1]这样的数组也阔以,那么首先想到的就是循环链表,然后控制求和的子数组长度即

数组02开发日志

项目计划日志 程序员:吕泽坤 时间:12:25:30 日期 上课 阅读资料  设计思路  代码 备注  4.11    查询数组变换为环形数组 14:00--14:10   14:12--14:30 进行淡云测试程序正确性             项目开发日志 程序员:吕泽坤 时间:12:31:39 日期 开始时间 结束时间 活动 备注 4.11 14:00 14:20 编写数组.2             项目缺陷日志 程序员:吕泽坤 时间:12:35:05 开发日期             

第 011讲:一个打了激素的数组[02]

slice: member[1:3] 课后作业: 0. 2,9,71. list1[0]= 1list1[0:1] = list1[1] 2. 方法一: >>> member['信服', '科技', '知识', '到款', '好吧']>>> name = member.pop()>>> name'好吧'>>> member.insert(0,name)>>> member['好吧', '信服', '科技', '知识'

强大的JQuery数组封装使用

JQuery对数组的处理非常便捷并且功能强大齐全,一步到位的封装了很多原生js数组不能企及的功能.下面来看看JQuery数组的强大之处在哪. $.each(array, [callback]) 遍历 不同于例遍 jQuery 对象的 $.each() 方法,此方法可用于例遍任何对象(不仅仅是数组哦~). 回调函数拥有两个参数:第一个为对象的成员或数组的索引, 第二个为对应变量或内容. 如果需要退出 each 循环可使回调函数返回 false, 其它返回值将被忽略.镇江市测绘局 each遍历,相信

JQuery对数组的一些操作总结

JQuery对数组的处理非常便捷并且功能强大齐全,一步到位的封装了很多原生js数组不能企及的功能.下面来看看JQuery数组的强大之处在哪. $.each(array, [callback]) 遍历 不同于例遍 jQuery 对象的 $.each() 方法,此方法可用于例遍任何对象(不仅仅是数组哦~). 回调函数拥有两个参数:第一个为对象的成员或数组的索引, 第二个为对应变量或内容. 如果需要退出 each 循环可使回调函数返回 false, 其它返回值将被忽略. each遍历,相信都不陌生,在

14-黑马程序员------C 语言学习笔记--- C语言二维数组

黑马程序员------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 二 二维数组 01 二维数组的定义: 类型标识符 数组名[常量表达式][常量表达式]; 如:int a[3][4]; 表示定义了一个3行4列的整型二维数组a,含有12个数组元素. 02 二维数组的引用: 数组名[下标][下标]

C++_第七章函数的基本知识_求阶乘的子函数_ 函数参数类型为数组_ 求数组内所有元素和、部分元素和的方法_实现了先从键盘输入到一个数组中,再用for循环取读出数组中的元素 for循环也可以用break来结束循环的

/* 第七章函数的基本知识 */ /*01)c++对于返回值有一定的限制:可以是常量.变量.指针.结构对象或表达式,但不可以是数组02)c++返回数组的方法:将数组作为结构会对象组成部分来返回03)函数遇到return则结束该函数04)如果一个函数的两房额参数类型相同,则必须分别制定每个参数的类型,而不能像声明常规变量那样,将声明组合在一起05)*/ //本代码注意double类型的写法以及double和int类型数据的转换 1 #include <iostream> 2 3 void che