整数数组的最大子数组
//注:本小队有三人,分别为王友军,黄瑞玻,白宇乾;因本班级人数为奇数,故如此
本次作业为返回整数数组中最大的子数组,应用c++编写,在visual c++ 2010 平台执行。
在编写过程中学会以下知识:
- 应用 int n;int *p=new int[n];开辟动态储存空间。满足输入动态数组的要求。
- 应用switch语句实现程序功能的多元化。
- 使用如下代码判断最大子数组之和。 for(int i=0;i<n;i++)
{
cin>>p[i];
}
int sum=p[0];
int max_sum=p[0];
for(int i=1;i<n;i++)
{
if(sum>0) //是否为正数
{
sum=sum+p[i]; //是正数,做和。
if(sum>max_sum) // 并判断是否为最大,是让其赋值给max_sum。
{
max_sum=sum;
end=i;
}
}
else
{
sum=p[i]; //是负数,将第i+1个数的值赋值给和值sum
if(sum>max_sum)//并判断是否为最大,是让其赋值给max_sum。
{
max_sum=sum;
star=i;
end=i;
}
}
}
cout<<"最大子数组位置为第"<<star+1<<"个到第"<<end+1<<"个"<<endl;
cout<<"最大子数组和为"<<max_sum<<endl; - 应用p[i]=rand()输入随机数组。如果不再加任何条件时数组元素范围为零到32767 (2^16-1),其计算原理为:y=ax+b(mod n)其中,n一般是一个很大的素数,几万。
a也是大素数。而且a,b,n都是常数。所以rand的产生决定于x,
他被称为seed。
每一个seed都是上一次产生的y的函数。这样,如果直接取seed=y的话,
虽然产生的rand之间相关性甚小,但只要知道某个y,就能推知以后的rand。
为避免这种情况,一般取seed为y和当时计算机的时间的函数,如seed=y+t比如VC中对于rand()函数是如下实现的.
int __cdecl rand (void)
{
return(((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);
} - 如果想用rand函数输出负数时,可以这样应用:p[i]=-rand()%4000+2000;
1 #include<iostream> 2 #include<ctime> 3 using namespace std; 4 int main() 5 { 6 cout<<"数1601-2 20163980 \n黄瑞波"<<endl;; 7 int m,n=0,star=0,end=0; 8 cout<<"1.手动输入数组。\n2.随机生成数组。请选择功能:";//选择自己输入或者随机生成 9 cin>>m; 10 switch(m) 11 { 12 case 1:{ 13 int *p=new int[n];//开辟为n的存储空间 14 cout<<"请输入数组的长度:"; 15 cin>>n; 16 if(n<0) 17 { 18 cout<<"输入的数组长度有误,请重新输入!"<<endl;//判断数据有效性 19 return 0; 20 } 21 cout<<"输入一个"<<n<<"维整型数组:"; 22 //以下算法代码参考与网络。 23 for(int i=0;i<n;i++) 24 { 25 cin>>p[i]; 26 } 27 int sum=p[0]; 28 int max_sum=p[0]; 29 for(int i=1;i<n;i++) 30 { 31 if(sum>0) //是否为正数 32 { 33 sum=sum+p[i]; //是正数,做和。 34 if(sum>max_sum) // 并判断是否为最大,是让其赋值给max_sum。 35 { 36 max_sum=sum; 37 end=i; 38 } 39 } 40 else 41 { 42 sum=p[i]; //是负数,将第i+1个数的值赋值给和值sum 43 if(sum>max_sum)//并判断是否为最大,是让其赋值给max_sum。 44 { 45 max_sum=sum; 46 star=i; 47 end=i; 48 } 49 } 50 } 51 cout<<"最大子数组位置为第"<<star+1<<"个到第"<<end+1<<"个"<<endl; 52 cout<<"最大子数组和为"<<max_sum<<endl; 53 };break; 54 case 2: 55 { 56 int *p=new int[n]; 57 cout<<"请输入数组的长度:"; 58 cin>>n; 59 if(n<0) 60 { 61 cout<<"输入的数组长度有误,请重新输入!"<<endl; 62 return 0; 63 }cout<<"随机数组为:"; 64 for(int i=0;i<n;i++) 65 { 66 p[i]=-rand()%4000+2000; 67 cout<<p[i]<<" "; 68 } 69 cout<<endl; 70 int sum=p[0]; 71 int max_sum=p[0]; 72 for(int i=1;i<n;i++) 73 { 74 if(sum>0) //判断是否为正数 75 { 76 sum=sum+p[i]; //是正数,做和。 77 if(sum>max_sum) // 并判断是否为最大,是让其赋值给max_sum。 78 { 79 max_sum=sum; 80 end=i; 81 } 82 } 83 else 84 { 85 sum=p[i]; //是负数,将第i+1个数的值赋值给和值sum 86 if(sum>max_sum)//并判断是否为最大,是让其赋值给max_sum。 87 { 88 max_sum=sum; 89 star=i; 90 end=i; 91 } 92 } 93 } 94 cout<<"最大子数组位置为:第"<<star+1<<"个到第"<<end+1<<"个"<<endl; 95 cout<<"最大子数组和为:"<<max_sum<<endl; 96 };break; 97 } 98 return 0; 99 }
运行结果截图为:
转载于:https://www.cnblogs.com/Kirito-math/p/9787955.html
整数数组的最大子数组相关推荐
- 整数数组中最大子数组求和02
设计思路: 在"整数数组中最大子数组求和01"的基础上完成本次实验. 本次实验的关键在于如何判断结束. 经设计,程序结束条件有两种:1.截取部分有重复:2.循环完整两次. 满足其中 ...
- 结对开发——返回一个整数数组中最大子数组的和 (首尾相接版)
一.题目及题目要求 题目:返回一个整数数组中最大子数组的和. 要求: (1)输入一个整形数组,数组里有正数也有负数. (2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (3)如果 ...
- 返回一个首尾相接的二维整数数组中最大子数组的和
题目: ·返回一个二维整数数组中最大子数组的和. 要求: ·输入一个二维整形数组,数组里有正数也有负数. ·二维数组首尾相接,象个一条首尾相接带子一样. ·数组中连续的一个或多个整数组成一个子数组,每 ...
- 返回一个二维整数数组中最大子数组的和(二人结对)
题目:返回一个二维整数数组中最大子数组的和 要求:1.输入一个二维整型数组,数组里有正数也有负数. 2.二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和. 3.求所有子数组的和的最大值. ...
- 返回一个整数数组中最大子数组的和---环形数组
一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]--A[j- ...
- 返回一个整数数组中最大子数组的和。
一.要求: (1)输入一个整形数组,数组里有正数也有负数. (2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (3)如果数组A[0]--A[j-1]首尾相邻,允许A[i-1],. ...
- 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)
题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为 ...
- 求二维整数数组中最大子数组的和(结对作业)
题目:返回一个二维整数数组中最大子数组的和 要求:(1)输入一个二维整形数组,数组里有正数也有负数. (2)二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和. (3)求所有子数组的和最大 ...
- 求一个有一千个元素的整数数组的最大子数组的和
求一个有一千个元素的整数数组的最大子数组的和 小组成员:司宇,滕达 设计过程: 设计界面: 在c#界面添加一些控件. 程序设计: 1.使用for循环和取随机数的函数产生一千个随机数并且将其赋值到数组中 ...
- nyoj983 首尾相连数组的最大子数组和
首尾相连数组的最大子数组和 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是 ...
最新文章
- AI可以在游戏里称霸,但是解决现实问题太难了
- Beta阶段——第4篇 Scrum 冲刺博客
- 天啊!NBA球星将举办第一届科技峰会!
- SAP Cloud for Customer的Contact和Account的从属关系
- windows自动设置ip地址脚本
- IT人的春节对联集锦
- 【译】Simple MySQL ORM for C
- 从我玩SNS想到自己的核心力
- 主流编程语言的特点分析
- web安全:X老师告诉小宁他在cookie里放了些东西,小宁疑惑地想:‘这是夹心饼干的意思吗?’
- (译)快速指南:用UIViewPropertyAnimator做动画
- 3大场景、4款新品公开亮相:「低速智能驾驶」新赛道惹关注
- 视频教程-【深入理解计算机网络】“数制”视频课程-网络技术
- 金融统计分析python论文_比较好写的本科金融专业论文题目 本科金融专业论文题目怎么取...
- 数学专业英语 -- 组合分析和数值分析
- 设计模式-鸭子类型1
- 193页PPT读懂《数字化转型方法论》,强烈建议收藏!
- OpenCV深入学习(6)--直方图之calcHist使用(补)
- 简单而有韵味,让你get最浪漫的表白编程代码大全
- 苹果手机有锁那些事,小心被坑
热门文章
- 未经专业销密的计算机设备,DOC1-题
- 生成式对抗神经网络code实现
- 深度学习简单线性训练
- 1以下数字Oracle打印缺少0,Oracle SQL中缺少關鍵字
- const关键字在c语言的作用,C语言const关键字作用
- java遍历范型list_Java 集合(1)-- 俯瞰 Java 集合源码以及分类
- 入门深度学习,理解神经网络、反向传播算法是第一关
- 定点补码加减法运算_计算机相关问题:谈谈我眼中的补码
- python语言继承6.3节例6-1中的person_第6.3节 Python动态执行之动态编译的compile函数...
- pytorch卷积神经网络_使用Pytorch和Matplotlib可视化卷积神经网络的特征