博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
返回一个整数数组中最大子数组的和
阅读量:4886 次
发布时间:2019-06-11

本文共 1247 字,大约阅读时间需要 4 分钟。

作业要求:

         1.程序必须能处理1000个元素;

         2.每个元素是int32类型的,出现子数组之和大于整型表示的最大范围会出现什么情况;

         3.输入一个整形数组,数组里面既有正数也有负数;

         4.数组中连续的一个或多个整数组成一个字数组,每个子数组都有一个和;

         5.求所有子数组的和的最大值,要求时间复杂度为O(n)。

设计思想:

       1.随即生成数组(含有正数和负数)。采用的是随机生成整数的方式,C语言生成的随机数为无符号数,即都是正的。要想生成正负随机的,可以先通过模除限定返回,再减去对应的范围的中间值即可。要获取-1000~+1000范围的随机数,总的数量为2001个,这样就可以通过代码rand()%2001 使得到的结果限制在0-2000范围,再减去1000, 结果就是-1000~+1000之间了。写成代码就是rand()%2001 - 1000;。

       2.将数组大小定义为1000,对于每个元素定义为int32类型。

       3.从第一个数开始做加法,若和大于第二个数,则继续加下一个数(若加上第三个数的和大于第三个数则重复进行此操作;小于第三个数,则舍掉前面的所有数,并继续重复进行此操作);若小于第二个数,则舍掉第一个数。

      4.取数的时候对其进行了乘2的32次方即4294967296,使数组内的元素可以越界,以观察溢出情况。

出现的问题:

      1.刚开始的时候不知道怎么使数据溢出。

      2.在生成随机数的时候,没有生成范围在-1000到+1000的随机数。

      3.对编程语言不熟练耗费了大量时间。

程序源码: #include 
#include
#include
using namespace std;int main() { int i; int a[1000]; int max = 0; int b = 0; srand(time(NULL)); cout<<"数组为:"<
max) max = b; } if (max == 0) { max = a[0]; for (i = 0; i < 1000; i++) { if (max < a[i]) { max = a[i]; } } } cout <<"最大子数组为:"<< max << endl; system("pause"); return 0; }

运行结果:

总结:

这次编程刚开始的时候是处于那种一脸懵逼的情况,编程语言都忘得差不多了,复习了很长时间,就算知道计算方式但是不知道具体怎么下手。在网上找了一个有类似需求的程序,对其中的代码一段段的分析,找出符合要求的部分并且进行修改,数据溢出是很难的,我们百度之后才明白INT 32是什么意思,然后修改。

转载于:https://www.cnblogs.com/xilei123/p/9786658.html

你可能感兴趣的文章
关于操作日期函数及其取范围
查看>>
Principles of measurement of sound intensity
查看>>
html 获取某些同名字的值
查看>>
[leetcode] Valid Palindrome
查看>>
carousel 插件隐藏列表中几项导致左右切换出错
查看>>
【转】SQL查询效率注意事项
查看>>
推荐几个Android学习的好博客
查看>>
UML2和建模工具学习总结
查看>>
SQL注入式攻击的防治的六个建议(转载)
查看>>
【转】具透 | 你可能不知道,iOS 10 有一个中国「特供」的联网权限功能
查看>>
【转】VMware 11安装Mac OS X 10.10
查看>>
jboss eap开启https协议
查看>>
项目资料准备
查看>>
Freeswitch录音Dialplan
查看>>
linux 基础命令
查看>>
2017.03.18【NOIP 普及组】模拟赛C组 T3:单元格
查看>>
学习的本质思考
查看>>
检查端口冲突
查看>>
领扣(LeetCode)独特的电子邮箱地址 个人题解
查看>>
【krpano】KRPano打开黑屏: FATAL ERROR
查看>>