最大子数组-工作效率

 1 #include<iostream>
 2 #include<ctime>
 3 #define N 2000          //宏定义
 4 using namespace std;
 5 void main()
 6
 7 {
 8     int a[N];              //整数数组
 9     int f;                 //数值范围
10     int i, j, k;             //控制循环变量
11     int sum, max;      //和与最大值
12     int m, n;               //记录子数组
13     clock_t start, end;    //记录开始和结束的时间
14     cout << "请输入数值范围:";
15     cin >> f;
16     start = clock();          // 把现在系统的时间调用赋值给start
17     srand((unsigned)time(NULL));         /*初始化随机数种子用的
18                                          没有这句代码
19                                          产生的随机数应该是相同的加上这句代码
20                                          产生的随机数是随机的*/
21     for (i = 0; i<N; i++)             //控制循环,
22     {
23         a[i] = (rand() % 2 ? -1 : 1)*rand() % f;         //产生随机数
24         cout << a[i] << "   ";       //输出一维数组
25     }
26     cout << endl;
27     max = a[0];          //先把数组中的第一个数作为最大值
28     //以下是进行比较出最大值
29     for (i = 0; i<N; i++)
30     {
31         for (j = 0; j <= i; j++)
32         {
33             sum = 0;       //初始化字数组的和
34             for (k = j; k <= i; k++)   //循环变量
35                 sum = sum + a[k];
36             if (sum>max)
37             {
38                 max = sum;        //更新最大值:从第一子数组的和加下一个数成为新的子数组的和,比较最大值
39                 m = j;
40                 n = i;     //记录不了循环里的i,j。
41             }
42         }
43     }
44     end = clock();        //结束的时间
45     cout << "运行时间为:" << double((end - start)) / 1000 << " 秒" << endl;  //运行时间
46     cout << "子数组和的最大值为:" << max << endl;
47     cout << "子数组是第" << m + 1 << "个数,到第" << n + 1 << "个数。" << endl;
48     cout << "子数组是:";
49     for (i = m; i <= n; i++)
50     {
51         cout << a[i] << "  ";
52     }
53     cout << endl;
54 }

实验截图:

数组大小:5000

运行时间:57.202s

设计思路:先宏定义数组的运算量后,输入数组的取值范围,从定义的第一个子数组开始比较子数组的和找出最大值,并记录开始和结束的时间。

实现时间流程:星期三(4月8日)

     
事件 时间段 时间
设计思路 3:00-4:30 1h30m
网上找例子 4:30-5:00 30m
解释语句 6:00-8:00 2h
总结 8:00-8:30
30m

总结:有什么不会的,我应该学会问别人,查资料,不能总是守着电脑发呆了。而且努力把看过的知识记住才行。

时间: 2024-10-20 05:18:40

最大子数组-工作效率的相关文章

《团队开发项目之三二维数组的最大子数组之和》

设计思想:按列或按行的次序依次进行计算每个以列或行的次序为基准的每种情况下的每个子矩阵的和,然后再依次进行比较每个子矩阵的和,取出最大的一个即是最大字数组之和: 源代码: //二维数组的最大子数组之和 //李敏,Apr 8th #include<iostream> #include<time.h> using namespace std; void main() { int m,n,a[100][100],k,t,c,i,j,z; int maxsum,sum[100],max=0

最大子数组二

一.实验思路:1.定义一个整型数组num[n],随机生成数组中元素的值2.把这个整形数组连成环,就是把这个数组中的每一个元素都当一次头,邻接的左元素做尾,遍历一次数组,找出每一个元数组的子数组最大和,存放在max_a[]中3.定义一个二维数组dpo[n][2],dpo[i][0]不包含num[i]子数组之和最大值,dpo[i][1]包含num[i]子数组之和最大值4.采用循环递归的方式,调用max函数计算dpo[i][0],dpo[i][1],计算包含数组元素本身和不包含本身的前子数组最大和的情

循环二维和最大子数组

1.设计思路 结合循环的一维子数组与二维子数组,因为我的二维最大子数组的和计算时,将二维的数组最大和转化成了一维的数组:因此,将这两个思路结合,就可以轻松的写出二维的和最大子数组. 2.源代码 #include<iostream> #include<ctime> using namespace std; int main() { int m, n;                      //数组大小 int i, j, p, q, o;                //循环变

结对开发之《返回一个二维整数数组中最大子数组的和》

一.题目要求 题目:返回一个二维整数数组中最大子数组的和. 要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 结对编程要求: 两人结对完成编程任务. 一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划.发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照).(截止到周四4月9日24:00) 二.编程思路 我们的思路比较简单,采用的是将

结对开发之《返回一个整数数组中最大子数组的和》

一.题目: 返回一个整数数组中最大子数组的和. 要求: 1.输入一个整形数组,数组里有正数也有负数. 2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 3.求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思路 1.定义一个大小为10的数组,接受任意十个自然正数: 2.分别将连续的一个数,两个数,......,组合成子数组,分别求出包含一个元素的数组的最大值,两个元素的,三个元素的,......,然后再比较这十组的值,求出最大值,即为所求: 3.单独判断一些特殊的

最大子数组求和问题

一.题目与要求 题目: 返回一个整数数组中最大子数组的和 要求: 1.输入一个整形数组,数组里有正数也有负数. 2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.       3.求所有子数组的和的最大值.要求时间复杂度为O(n). 结对编程要求:        1.两人结对完成编程任务.       2.一人主要负责程序分析,代码编程.       3.一人负责代码复审和代码测试计划.       4.发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工

分治策略 &nbsp; 最大子数组问题

递归式 递归式与分治方法是紧密相关的,因为使用递归式可以很自然地刻画分治算法的运行时间.一个递归式就是一个等式或不等式,它通过更小的输入上的函数值来描述一个函数.例如,在2.3.2节,我们用递归式描述了MERGE-SORT过程的最坏情况运行时间T(n): Θ(1)        若n=1 T(n) =                         (4.1) 2T(n/2)+Θ(n)    若n>1 求解可得T(n)=Θ(nlgn) 递归式可以有很多形式.例如,一个递归算法可能将问题划分为规模

二维数组循环求最大子数组

一.题目要求 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 要求时间复杂度为O(n)题目:返回一个二维整数数组中最大子数组的和 二.源代码 #include<iostream.h> int main() {  int x,y,n,m;  int s[10][20];  int sum[10][20]; cout<<"请输入3行4列的矩

软件工程结对开发之求一个或者多个数组中连续最大子数组之和3

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想 三.代码 四.截图 五.总结 六.工作合影