返回一个整数数组中最大子数组的和。
一、要求:
(1)输入一个整形数组,数组里有正数也有负数。
(2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
(3)如果数组A[0]……A[j-1]首尾相邻,允许A[i-1],......A[n-1], A[0]……A[j-1]之和最大。
二、设计思想:
如果数组首尾相连,那么每一个元素都可以当成是开头即从A[n]开始,到A[n-1]结束,这样的话,就相当用剪子在一开始的数组中的元素的前一位剪开。这样的话,可以建立新的三个数组,前两个数组分别盛放剪开的两部分,第三个数组则是负责把前两个数组按顺序存放起来。前两个数组的长度之和等于第三个数组长度。这样便组成了新的数组。再按照以前计算条形数组的方法计算即可。
三、程序代码:
#include <iostream>
#include<ctime>
#define Num 10000
using namespace std;
int DTGH_Sum(int a[],int n) //动态规划法求子段和函数
{
int sum = 0;
int *b = (int *) malloc(n * sizeof(int)); //动态为数组分配空间
b[0] = a[0];
for(int i = 1; i < n; i++)
{
if(b[i-1] > 0)
b[i] = b[i - 1] + a[i];
else
b[i] = a[i];
}
for(int j = 0; j < n; j++)
{
if(b[j] > sum)
sum = b[j];
}
delete []b; //释放内存
return sum;
}
int main()
{ int temp,b;
int sum=0;
int i;
int a1,a2;
int a[Num];
int length=0;
while (length==NULL||length == 0)//如果数组长度为空或零则请重新输入
{
cout<<"请输入数组长度:";
cin>>length;
}
cout<<"生成随机数组: "<<endl;
srand((unsigned)time(NULL));
for(i=0;i<length;i++)//产生随机序列
{
if(rand()%2==0)
{
a[i]=rand()%50;
}
else
{
a[i]=(-1)*rand()%50;
}
cout<<a[i]<<" ";
}
cout<<endl;
cout<<"此首尾相连的数组中最大子数组的和有以下几种可能:"<<endl;
cout<<"第1种排列方式:"<<endl;
for( i=0;i<length;i++)
{
cout<<a[i]<<" ";
}
cout<<"最大子数组和为:"<<DTGH_Sum(a,length)<<endl;
a1=DTGH_Sum(a,length);
for(b=1;b<length;b++)
{
temp=a[0];
for(i=1;i<=length;i++)
{
a[i-1]=a[i]; //将第一个数变为最后一个数
}
a[length-1]=temp;
cout<<"第"<<b+1<<"种排列方式:"<<endl;
for( i=0;i<length;i++)
{
cout<<a[i]<<" ";
}
cout<<"最大子数组和为:"<<DTGH_Sum(a,length)<<endl;
if(DTGH_Sum(a,length)>=sum)
{
sum=DTGH_Sum(a,length);
}
}
a2=sum;
cout<<endl;
if(a1>=a2)
{
cout<<"综上,最大的子数组和为:"<<a1<<endl;
}
else
{
cout<<"综上,最大的子数组和为:"<<a2<<endl;
}
return 0;
}
四、运行结果:
转载于:https://www.cnblogs.com/lwan/p/10212736.html
返回一个整数数组中最大子数组的和。相关推荐
- 软工 课堂作业:选出一个整数组中最大子数组
项目计划日志 10.6 看ppt,熟悉内容. 10.6下午,开始编程调试. 10.7 运行调试,写博客. 时间记录日志 日期 开 ...
- 结对开发——返回一个整数数组中最大子数组的和 (首尾相接版)
一.题目及题目要求 题目:返回一个整数数组中最大子数组的和. 要求: (1)输入一个整形数组,数组里有正数也有负数. (2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (3)如果 ...
- 返回一个首尾相接的二维整数数组中最大子数组的和
题目: ·返回一个二维整数数组中最大子数组的和. 要求: ·输入一个二维整形数组,数组里有正数也有负数. ·二维数组首尾相接,象个一条首尾相接带子一样. ·数组中连续的一个或多个整数组成一个子数组,每 ...
- 返回一个二维整数数组中最大子数组的和(二人结对)
题目:返回一个二维整数数组中最大子数组的和 要求:1.输入一个二维整型数组,数组里有正数也有负数. 2.二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和. 3.求所有子数组的和的最大值. ...
- 返回一个整数数组中最大子数组的和---环形数组
一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]--A[j- ...
- 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)
题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为 ...
- 课堂练习:返回一个二维数组中最大子数组的和
1.题目: 返回一个二维数组中最大子数组的和. 2.要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子 ...
- 返回一个循环数组中最大子数组的和
设计思路 首先利用rand()函数随机产生一个一维数组,数组长度通过宏定义来控制.求首尾连接的一维数组的最大子数组的和我的思路是:循环N次(N是数组的长度)依次检测数组的最大子数组的和再比较大小,保留 ...
- 求二维整数数组中最大子数组的和(结对作业)
题目:返回一个二维整数数组中最大子数组的和 要求:(1)输入一个二维整形数组,数组里有正数也有负数. (2)二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和. (3)求所有子数组的和最大 ...
最新文章
- 行业深度见解•SD-WAN对于企业云的重要性
- Activity的生命周期是谁调用的?
- [unreal4入门系列之八] 使用VS编译UE4编辑器并添加物体到场景中
- antd如何获取表单的值_antd 父组件获取子组件中form表单的值
- Apache + PHP 服务
- android地图路径绘制,android:利用svg的path路径+canvas 开发自定义地图控件
- sum服务器操作系统,SUM服务器监控软件
- python 西门子交换机_python读取交换机
- .NET (二)委托第二讲:内置委托Func
- workbench拓扑优化教程_轻量化及拓扑优化软件GENESIS介绍——可集成到Workbench
- 谷歌新竞赛:在欧美长大的AI,也要认识亚非拉的生活丨可参加NIPS
- MarkDown 的两种页内跳转方法!!!!!
- MacOS开发必备工具brew,安装nginx反向代理,替代linux工具 apt-get和 yum
- Unity3D对象池小案例
- 电缆直径和电缆流过电流计算以及对照表
- CTFshow-大牛杯
- 【IDEA类注释模板和方法注释模板】
- TI C64X+通用库函数使用手册
- 创建OpenGL Context(WGL)
- python爬虫与java爬虫的区别_java爬虫(一)主流爬虫框架的基本介绍