小组成员:李敏、刘子晗

1.设计思想:由于已经做过这个题目,只要对之前的程序加上相应的测试和约束即可。我们两个人一起商议后,决定了程序的主框架和并列出了最终可以实现的功能。先要定义数组长度和上下限的变量,然后通过if语句对用户所给出的长度和数值进行判断看是否合法,如果不合法要重新输入。最后再加上之前求和的相应代码即可。

2.出现的问题:我们达成协议后,李敏负责编程,我负责测试。开始写程序,在写判断数值是否满足int整型范围的时候出现了错误,我在测试的时候发现她把小于号错写成了大于号,然后加以改正。还出现了几个细节的符号错误。最后我对她写的程序的代码规范提出了一些建议,比方说变量名称规范,括号单独占一行以及要有空格等。都加以改正后就完成了全部工作。

3.源代码:

//求数组中连续子数组的最大和(测试后)
//刘子晗 2015/3/29
#include <iostream>
#include <time.h>
using namespace std; void main()
{
int arr[];
int length,MAX,MIN;
char ifContinue = 'Y';
srand((unsigned)time(NULL)); while (ifContinue == 'Y')
{
cout << "请输入数组长度length:" ;
cin >> length;
cout << "请输入此数组的最小值MIN和最大值MAX:";
cin >> MIN >> MAX; //检测数组范围的上下限数值是否合法
if( MIN > MAX||MIN <= - || MAX >= )
{
cout << "输入的数字不合法,请重新输入:" << endl;
cin >> MIN >> MAX;
} //检测数组长度的合法性
if (length == )
{
cout << "数组长度不能为零,请重新输入:";
cin >> length;
}
else if(length >= || length > MAX - MIN)//保证数组中没有重复的数
{
cout << "数组长度过长,请输入1000以内的数组长度:";
cin >> length;
}
//检测数组长度的合法性 cout << "生成的数组为:"<< endl;
for (int i = ;i < length; i++)
{
arr[i] = rand()%( MAX - MIN + ) + MIN;//生成一个随机数组
cout << arr[i] << " ";
}
cout << endl; //依次按数组的顺序求出当前子数组的最大和
int tran = arr[];
int sum = tran;
for (int j = ; j < length; j++)
{
tran = max(arr[j],tran + arr[j]);
sum = max(sum, tran);
}
//考虑到数组的连续(即数组可形象化为一个圈),故分别从数组首端和末端同时进行以求出两端还未相遇前的各自的最大子数组之和
int i,j,sum1 = arr[];
for (i = ; i < length && sum1 + arr[i] > sum1; i++)
{
sum1 += arr[i];
}
tran = arr[length];
for (j = length - ; j >= && tran + arr[j] > tran; j--)
{
tran += arr[j];
}
//依次比较两端数组还未相遇前的两个最大子数组之和的和与之前按数组顺序求出的最大子数组之和
if ( i < j && sum1 + tran > sum)
{
sum = sum1 + tran; //取两种情况下的最大字数组之和即可
} cout << "该数组的连续子数组之和的最大值为:" << sum << endl; cout << "是否继续测试?请输入:(Y/N)" << endl;
cin >> ifContinue ;
} }

4.测试截图:

5.总结:(1)通过两个人结对合作,我体会到了“1+1>2”,因为两个人肯定有至少两种想法,通过比较良好的合作可以分工从而提高工作效率;在遇到问题时,可以共同查找资料快速找到解决办法;当然我们也有好几次意见出现不统一的情况,这时就需要及时沟通,如果有对错之分,就可以及时改正,否则就加以改善。以后的学习和工作中想必会有很多的合作,处理好和队友之间的关系,明确分工及时交流的确可以是自己的水平提高地更快,还可以开阔自己的思维。

(2)这个程序我把重点放到了测试和代码规范上,由于平时习惯了写C++,我自己的不足之处主要有:不太爱写注释,变量和参数名有时不按规范,希望自己以后多加注意。

另外老师一直强调Java的重要,所以在网上找了关于Java的代码规范,方便以后对照

相关链接:http://www.infoq.com/news/2014/02/google-java-coding-standards

附图:

Task 4 求数组的连续子数组的最大和(团队合作)的更多相关文章

  1. Dp解决数组中连续子数组的最大和

    #include<iostream> ];     ;i<size;i++)     {           TempSum = CurSum;           )        ...

  2. 剑指Offer面试题:28.连续子数组的最大和

    一.题目:连续子数组的最大和 题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n).例如输入的数组为{1,-2,3 ...

  3. 剑指offer面试题31连续子数组的最大和

    一.题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果 ...

  4. 《剑指offer》第四十二题(连续子数组的最大和)

    // 面试题42:连续子数组的最大和 // 题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整 // 数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n). #in ...

  5. 剑指 offer 面试题31 连续子数组的最大和(动态规划)

    求连续子数组的最大和 题目描述 给定一个整形数组,有正数也有负数,数组中连续一个或多个组成一个子数组,求所有子数组的和的最大值,要求时间复杂度为O(n); 测试用例 给定数组 {1,-2,3,10,- ...

  6. 连续子数组的最大乘积及连续子数组的最大和(Java)

    1. 子数组的最大和 输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.例如数组:arr[]={1, 2, 3, -2, ...

  7. 【剑指offer】面试题 42. 连续子数组的最大和

    面试题 42. 连续子数组的最大和 NowCoder 题目描述 输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值. 示例: 输入: [-2,1 ...

  8. leetcode面试题42. 连续子数组的最大和

      总结一道leetcode上的高频题,反反复复遇到了好多次,特别适合作为一道动态规划入门题,本文将详细的从读题开始,介绍解题思路. 题目描述示例动态规划分析代码结果 题目   面试题42. 连续子数 ...

  9. 《剑指Offer》- 连续子数组的最大和或最小和

    前言 本文是<剑指Offer>系列(JavaScript版)的第一篇,题目是"连续子数组的最大和或最小和". 话不多说,开始"打怪"修炼... 一. ...

随机推荐

  1. KVM的初始化过程

    之前打算整理一下在Guest VM, KVM, QEMU中IO处理的整个流程,通过查阅资料和阅读源码,已经大致知道IO在Guest KVM中的处理流程.当想要整理IO在KVM和QEMU中的处理时,发现 ...

  2. CSS3 Gradient渐变效果

    最近看到一遍关于渐变的文章,感觉很好,只是收藏感觉太可惜了,就转载了,好好学习! CSS3 Gradient分为linear-gradient(线性渐变)和radial-gradient(径向渐变). ...

  3. oracle常用视图v$mystat v$sesstat v$sysstat v$statname v$thread v$ parameter v$session v$process

    这两天看了盖国强老师的<<深入浅出>>,很佩服盖老师钻研的精神.书中常用到一个查询语句,为了获取当前会话的跟踪文件路径,sql如下: SELECT d.VALUE || '/' ...

  4. Mac端 Open GL初探

    一.环境配置 1.创建macOS工程 2.添加OpenGL.framework和GLUT.framework两个系统库 3.拖入资源文件 如果libGLTools.a问价先拖入到工程其他位置,后再移到 ...

  5. Redis持久化存储详解(一)

    > 为什么要做持久化存储? 持久化存储是将 Redis 存储在内存中的数据存储在硬盘中,实现数据的永久保存.我们都知道 Redis 是一个基于内存的 nosql 数据库,内存存储很容易造成数据的 ...

  6. Linux—文件命令之touch命令

    下面总结一下对于文件的操作命令: satat命令:用于显示文件的详细信息,包括文件.设备.gid.各种时间等. 命令格式:stat filename touch 的两个功能: 1.新建文件,如需建立特 ...

  7. python新手第一天学习笔记-python循环控制和第一个python小游戏

    Python的三种逻辑控制 1.python语法. python 是以缩进作为基本判断的.同一代码缩进需要保持一致.否则会报错 1.if 的三种循环 _age = 53 # 注意,input接受的都是 ...

  8. go语言实战笔记(二)

     码代码之前一定要安装go,哈哈哈哈,反正我只装goland然后写不了代码报错,卡在第一段代码哈哈哈哈哈哈 新建项目goproject 新建src文件夹 新建main文件夹 新建第一个go文件 开始写 ...

  9. Datax3.0使用说明

    一.datax3.0介绍 1.DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).HDFS.Hive.ODPS.HBase.FTP等各种异构数据源之间稳 ...

  10. 【转】SVG与HTML、JavaScript的三种调用方式

    原文:https://www.cnblogs.com/guohu/p/5085045.html SVG与HTML.JavaScript的三种调用方式 一.在HTMl中访问SVG的DOM 1 2 3 4 ...