结对开发——返回一个整数数组中最大子数组的和 (首尾相接版)
一、题目及题目要求
题目:返回一个整数数组中最大子数组的和。
要求:
(1)输入一个整形数组,数组里有正数也有负数。
(2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
(3)如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。
(4)同时返回最大子数组的位置。
二、设计思路
这次的编程开发是基于上次的返回一个整数数组中最大子数组的和( http://www.cnblogs.com/a1397240667/p/5322471.html),我和我的搭档开始了认真的讨论,再结合课堂上的同学讨论,如何能在一维数组原有的基础上,加上首尾相连这个条件,最后得到的方法大概思想是:遍历数组里面的每一个数将第一个数变为最后一个数,这样又变成了一个新的一维数组,输出每个数组的最大子数组和,然后比较每个输出的和,找出最大的数。
三、代码
1 /*2016.3.24 weilihua fengyutong*/ 2 #include <iostream> 3 #include<ctime> 4 #define Num 10000 5 using namespace std; 6 int DTGH_Sum(int a[],int n) //动态规划法求子段和函数 7 { 8 int sum = 0; 9 int *b = (int *) malloc(n * sizeof(int)); //动态为数组分配空间 10 b[0] = a[0]; 11 for(int i = 1; i < n; i++) 12 { 13 if(b[i-1] > 0) 14 b[i] = b[i - 1] + a[i]; 15 else 16 b[i] = a[i]; 17 } 18 for(int j = 0; j < n; j++) 19 { 20 if(b[j] > sum) 21 sum = b[j]; 22 } 23 delete []b; //释放内存 24 return sum; 25 } 26 int main() 27 { int temp,b; 28 int sum=0; 29 int i; 30 int a1,a2; 31 int a[Num]; 32 int length=0; 33 while (length==NULL||length == 0)//如果数组长度为空或零则请重新输入 34 { 35 cout<<"请输入数组长度:"; 36 cin>>length; 37 } 38 cout<<"生成随机序列: "<<endl; 39 srand((unsigned)time(NULL)); 40 for(i=0;i<length;i++)//产生随机序列 41 { 42 if(rand()%2==0) 43 { 44 a[i]=rand()%100; 45 } 46 else 47 { 48 a[i]=(-1)*rand()%100; 49 } 50 cout<<a[i]<<" "; 51 } 52 cout<<endl; 53 cout<<"此首尾相连的数组中最大子数组的和有以下几种可能:"<<endl; 54 cout<<"第1种排列方式:"<<endl; 55 for( i=0;i<length;i++) 56 { 57 cout<<a[i]<<" "; 58 } 59 cout<<"最大子数组和为:"<<DTGH_Sum(a,length)<<endl; 60 a1=DTGH_Sum(a,length); 61 for(b=1;b<length;b++) 62 { 63 temp=a[0]; 64 for(i=1;i<=length;i++) 65 { 66 a[i-1]=a[i]; //将第一个数变为最后一个数 67 68 } 69 a[length-1]=temp; 70 cout<<"第"<<b+1<<"种排列方式:"<<endl; 71 for( i=0;i<length;i++) 72 { 73 cout<<a[i]<<" "; 74 } 75 cout<<"最大子数组和为:"<<DTGH_Sum(a,length)<<endl; 76 if(DTGH_Sum(a,length)>=sum) 77 { 78 sum=DTGH_Sum(a,length); 79 } 80 } 81 a2=sum; 82 cout<<endl; 83 if(a1>=a2) 84 { 85 cout<<"综上,最大的子数组和为:"<<a1<<endl; 86 } 87 else 88 { 89 cout<<"综上,最大的子数组和为:"<<a2<<endl; 90 } 91 return 0; 92 }
四、运行截图
当数组长度为1000时:
五、项目计划日志
日期&&任务 |
听课 | 编写程序 | 阅读相关书籍 | 网上查找资料 | 日总计 |
周一 | 100 | 30 | 30 | 160 | |
周二 | 120 | 30 | 30 | 180 | |
周三 | 30 | 30 | 10 | 70 | |
周四 | 100 | 20 | 30 | 150 | |
周五 | 120 | 30 | 30 | 180 | |
周六 | 45 | 30 | 10 | 85 | |
周日 | 200 | 30 | 10 | 240 | |
周总计 | 200 | 535 | 180 | 110 |
1065 |
时间记录日志
3/21
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
3/21 | 14:00 | 15:50 | 10 | 100 | 听课 | 软件工程上课 |
21:04 | 21: 34 | 0 | 30 | 阅读书籍 | 《构建之法》 | |
22:10 | 22: 40 | 0 | 30 | 网上查找资料 | ||
3/22 | 18:00 | 18:30 | 0 | 30 | 阅读书籍 | 《构建之法》 |
19:00 | 21:30 | 20 | 120 | 编写程序 | 结对开发- 子数组之和 | |
22: 15 | 22: 45 | 0 | 30 | 网上查找资料 | ||
3/23 | 19: 25 | 20: 00 | 5 | 30 | 编写程序 | 结对开发- 子数组之和 |
22:00 | 22: 30 | 0 | 30 | 阅读书籍 | 《构建之法》 | |
22:40 | 22: 50 | 0 | 10 | 查找资料 | ||
3/24 | 14:00 | 15: 50 | 10 | 100 | 上课 | 软件工程上课 |
18:26 | 18: 50 | 4 | 20 | 编写程序 | 结对开发- 子数组之和 | |
22:00 | 22:30 | 0 | 30 | 阅读书籍 | 《构建之法》 | |
3/25 | 14: 00 | 16: 20 | 20 | 120 | 编写程序 | 结对开发- 子数组之和 |
11:23 | 12: 00 | 7 | 30 | 网上查找资料 | ||
21:00 | 21:30 | 0 | 30 | 阅读书籍 | 《构建之法》 | |
3/26 | 7: 00 | 7: 30 | 0 | 30 | 阅读书籍 | 阅读《构建之法》 |
10: 00 | 11: 00 | 15 | 45 | 编写程序 | 结对开发- 子数组之和 | |
9: 45 | 9: 55 | 0 | 10 | 网上查找资料 | ||
3/27 | 8:20 | 12:00 | 20 | 200 | 编写程序 | 结对开发- 子数组之和 |
21:00 | 21:10 | 0 | 10 | 网上查找资料 | ||
21:30 | 22:00 | 0 | 30 | 阅读书籍 | 《构建之法》 |
缺陷记录日志
日期 | 编号 | 类型 | 引入阶段 | 排除阶段 | 修复时间 | 备注 |
3/24 | 1 | 20 | 编码 | 编译 | 4 | 实参与形参类型对应问题 |
3/24 | 2 | 20 | 编码 | 编译 | 1 | 申请了动态空间未释放 |
3/25 | 3 | 20 | 编码 | 编译 | 7 | 当数组长度为0时,无法正常跳出 |
3/27 | 4 | 20 | 编码 | 编译 | 20 | 逻辑有问题,会突然中止 |
3/27 | 5 | 20 | 编码 | 编译 | 1 | 变量未初始化 |
同组伙伴博客:http://www.cnblogs.com/qizhonh/
工作照:
转载于:https://www.cnblogs.com/a1397240667/p/5323248.html
结对开发——返回一个整数数组中最大子数组的和 (首尾相接版)相关推荐
- 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)
题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为 ...
- 结对开发——返回一个整数数组中最大子数组的和
一.题目要求 1.输入一个整型数组,数组里有正数也有负数. 2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 3.求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想 ...
- 软工 课堂作业:选出一个整数组中最大子数组
项目计划日志 10.6 看ppt,熟悉内容. 10.6下午,开始编程调试. 10.7 运行调试,写博客. 时间记录日志 日期 开 ...
- 返回一个二维整数数组中最大子数组的和(二人结对)
题目:返回一个二维整数数组中最大子数组的和 要求:1.输入一个二维整型数组,数组里有正数也有负数. 2.二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和. 3.求所有子数组的和的最大值. ...
- 返回一个整数数组中最大子数组的和---环形数组
一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]--A[j- ...
- 返回一个首尾相接的二维整数数组中最大子数组的和
题目: ·返回一个二维整数数组中最大子数组的和. 要求: ·输入一个二维整形数组,数组里有正数也有负数. ·二维数组首尾相接,象个一条首尾相接带子一样. ·数组中连续的一个或多个整数组成一个子数组,每 ...
- 返回一个整数数组中最大子数组的和。
一.要求: (1)输入一个整形数组,数组里有正数也有负数. (2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (3)如果数组A[0]--A[j-1]首尾相邻,允许A[i-1],. ...
- 课堂练习:返回一个二维数组中最大子数组的和
1.题目: 返回一个二维数组中最大子数组的和. 2.要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子 ...
- 求二维整数数组中最大子数组的和(结对作业)
题目:返回一个二维整数数组中最大子数组的和 要求:(1)输入一个二维整形数组,数组里有正数也有负数. (2)二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和. (3)求所有子数组的和最大 ...
最新文章
- 按键处理技巧(状态机)
- python计算器gui设计_python GUI模拟实现计算器
- json 潜逃 结构体_JSON还原为结构体 - osc_t5zhwnvx的个人空间 - OSCHINA - 中文开源技术交流社区...
- 李洋疯狂C语言之用递归解决李白喝酒问题(二)
- [转]自然语言处理中的Attention Model:是什么及为什么
- linux 该用户组id,linux用户和用户组的一些基本知识
- Ubuntu10.04设备未托管
- 频谱仪使用方法图解_安全继电器工作原理、接线图、使用方法图解
- java 命令行运行 打包 IDEA
- HTB相关TC命令以及内核实现介绍
- 服务器维修工单模板,XX运维服务方案模板.doc
- linux bluefish制作网页,基于Linux文本模式的网页编辑器Bluefish
- 买二手房和买新房-----这几年的是没差别的
- 定时报警器课程设计(基于单片机)
- 数组、数组的定义、对数组的理解
- javaweb-jsp编程例题
- C#:实现康托尔集cantor set算法 (附完整源码)
- 卸载wrapt_conda 安装与卸载cudnn
- IO流如何选择字节流和字符流??
- win10重置计算机卡10%,win10千万不要重置_win10重置此电脑有什么后果
热门文章
- JS node 后端签名前端文件直传ali-oss解决方案
- javascript学习系列(20):数组中的bind,apply,call
- 前端学习(3150):react-hello-react之DoM的diff算法
- 前端学习(3035):vue+element今日头条管理-关于问题的一个解析
- 前端学习(2938):vue对象之间的实例属性ref
- [html] 说说你对html的嵌套规范的理解,都有哪些规范呢?
- [html] 请实现一个网站加载进度条
- PS教程第十七课:放大看 缩小看
- [html] H5播放的video视频,如何实现对视频截图?
- [css] 为什么要使用css sprites?