最大联通子数组的和

最大联通子数组的和

 在几次“迭代”开发数组的项目之后老师又布置了这个“联通数组”的任务,当然,此次任务依旧是“结对编程”,要求如下:

1、题目:返回一个二维数整数组中最大联通子数组的和;

2、数组中有正数,也有负数;

3、求所有子数组的最大值,要求时间复杂度为O(n);

4、程序要使用的数组放在input.txt文件中,文件的格式:行数,列数,每一行的元素;


 

一、实验思路 

      数组的行和列和数组元素又文件读入,然后把数按行分成几个一维数组,对于该一维数组,求出他们的最大连续数组之和,并且记录下最大连续数组的第一位和最后一位的位置,之后判断几个一维数组的最大连续数组的位置是否相接或包括。最后在加上没有包括的正数(必须在上一行的最大连续数组的第一位和最后一位的位置之间),输出之前加和。

二、实验代码及实现

代码如下:

  1 //2016/4/1 求最大联通子数组的和——赵子茵&孔宇航
  2 
  3 #include<iostream>
  4 #include<fstream>
  5 using namespace std;
  6 
  7 int Max(int n, int arr[], int *Start_mark, int *Final_mark)
  8 {
  9     int step[100] = { 0 };//Step记录每步计算子数组的和
 10     int i, sum = 0, max1 = 0;
 11     /* sum是子数组的和
 12        max1是子数组最大和
 13     */
 14     for (i = 0; i<n; i++)
 15     {
 16         if (sum<0)
 17             sum = arr[i];
 18         else
 19             sum = sum + arr[i];
 20         step[i] = sum;
 21     }
 22     max1 = step[0];
 23     for (i = 0; i<n; i++)
 24     {
 25         if (max1<step[i])
 26         {
 27             max1 = step[i];
 28             *Final_mark = i;
 29         }
 30     }
 31     for (i = *Final_mark; i >= 0; i--)
 32     {
 33         if (step[i] == arr[i])
 34         {
 35             *Start_mark = i;
 36             break;
 37         }
 38     }
 39     return max1;
 40 }
 41 
 42 void main()
 43 {
 44     int m, n, i, j, Start_mark, Final_mark, big;
 45     int Max1;
 46     int read[10000];//读取文件的字符集
 47     int up[100], down[100], h[100];
 48     int Arr2[100][100], Arr1[100];
 49     /* m行n列的数组
 50        Start_mark表示最大子数组的起始坐标
 51        Final_mark表示最大子数组的终止坐标
 52        big表示最后输出的最大联通子数组和
 53        Max1是函数返回的一维数组最大子数组和
 54        up存放每行最大子数组起始坐标
 55        down存放每行最大子数组终止坐标
 56        h存放每行最大子数组的和
 57        Arr2存放二维数组
 58        Arr1存放拆成的一维数组
 59     */
 60 
 61     /*cout << "请输入二维数组的行数和列数:";
 62     cin >> m >> n;
 63     cout << "请输入这个二维矩阵:" << endl;
 64     for (i = 0; i<m; i++)
 65     {
 66         for (j = 0; j<n; j++)
 67         {
 68             cin >> a[i][j];
 69         }
 70     }*/
 71 
 72     //文件输入
 73     ifstream infile("input.txt", ios::in);
 74     if (infile.is_open() == false)
 75     {
 76         cerr << "open error!" << endl;
 77         exit(1);
 78     }
 79     infile >> read[0];//读取行数m
 80     m = read[0];
 81     infile >> read[1];//读取列数n
 82     n = read[1];
 83     cout << "指定文件中" << read[0] << "" << read[1] << "列的二维数组如下:" << endl;
 84     for (i = 0; i < m; i++)//读取数组并按格式输出
 85     {
 86         for (j = 0; j < n; j++)
 87         {
 88             infile >> read[i + 2];
 89             Arr2[i][j] = read[i + 2];
 90             cout << Arr2[i][j] << " ";
 91             if (j % (n - 1) == 0 && j != 0)
 92                 //if (j == n-1)
 93                 cout << endl;
 94         }
 95     }
 96     infile.close();
 97 
 98     //把二维数组按行分解为几个一维数组
 99     for (i = 0; i<m; i++)
100     {
101         for (j = 0; j<n; j++)
102         {
103             Arr1[j] = Arr2[i][j];
104         }
105         Max1 = Max(n, Arr1, &Start_mark, &Final_mark);
106         up[i] = Start_mark;
107         down[i] = Final_mark;
108         h[i] = Max1;
109     }
110 
111     big = h[0];
112     for (i = 0; i + 1<m; i++)
113     {
114         if (up[i] <= down[i + 1] && down[i] >= up[i + 1])//联通,则相加
115             big += h[i + 1];
116         for (j = up[i]; j<up[i + 1]; j++)
117         {
118             if (Arr2[i + 1][j]>0)//是否独立正数,有则加
119                 big += Arr2[i + 1][j];     
120         }
121     }
122 
123     cout << "此二维数组的最大联通子数组的和为:" << endl;
124     cout << big << endl;
125     
126 }

运行结果如下:

      

    

     

三、实验心得体会

      对于本次实验,我们最开始尝试过遍历数组的方法,设置了结构体,将数组的数设置坐标,但是后来没有掌握好方法以失败告终。在课堂上受到同学的启发将二维数组编程一位数组,比如第一行和第二行加和后出现新的一位数组的方法,在网上阅读了写别人的思路,最后和小伙伴写出了这个程序。这个程序存在缺陷,个别的测试用例会出错,现在的程序只能解决最大连续数组相连的,还不能解决不相连的,对于最后今加上剩余的正数,只会加上与第一行重合的,第三行以及以下的行并不加上前一步加上的第二行的正数。这个缺陷会在以后慢慢完善,希望老师谅解。

最后附 孔同学(孔宇航)博客地址:http://www.cnblogs.com/kongyuhang/

转载于:https://www.cnblogs.com/2016helen/p/5352919.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

曲线 线性回归_GRAPHPAD作图技巧(二)--拟合曲线

计算药物半抑制浓度IC50的拟合曲线图的做法&#xff1a;第一步&#xff1a;使用的版本是Graphpad Prism 5&#xff0c;打开软件后&#xff0c;选择XY作图方式&#xff1a;第二步&#xff1a;将实验所得的数据填写入图表中&#xff0c;注意x轴写入的是log[药物]&#xff0c;比如…

VBA之文件筛选

在工作中&#xff0c;经常会碰到从一堆腐朽的source中按照一个列表去筛选出来现在还要用的source文件。 这个如果用vba来实现的话&#xff0c;会节省大量的时间&#xff0c;而且不会出错。 前提说明&#xff1a; 将想要复制的文件名列表放在第一sheet的第一列&#xff0c;然后执…

2 引入失败_苦等2年!总投资2800万!镇江首个民国风商场,来了!

超级重磅&#xff01;就在近日&#xff01;镇江备受关注的首个民国风商场九如商业广场终于完工&#xff0c;招商马上启动项目施工2年&#xff0c;总投资约2800万计划引入酒店、商业、超市等目前老宴春酒楼已确定入驻01总投资2800万&#xff01;九如商业广场终于完工&#xff0c…

好用的cnn网络_DPCNN,究竟是多么牛逼的网络呢?

ACL2017年中&#xff0c;腾讯AI-lab提出了DeepPyramidConvolutionalNeuralNetworksforTextCategorization(DPCNN)。论文中提出了一种基于word-level级别的网络-DPCNN&#xff0c;由于上一篇文章介绍的TextCNN不能通过卷积获得文本的长距离依赖关系&#xff0c;而论文中DPCNN通过…

干货-iOS、mac开源项目及库,以后我也会持续更新。

昨晚在网上看的干货&#xff0c;直接分享给大家了&#xff0c;觉得有用的&#xff0c;直接fork吧。 https://github.com/Brances/TimLiu-iOS转载于:https://www.cnblogs.com/brance/p/5366843.html

二叉树前序中序后续线索树_二叉树的先序,中序,后序遍历以及线索二叉树的遍历...

二叉树的先序,中序,后序遍历以及线索二叉树的遍历(2008-05-04 17:52:49)标签&#xff1a;杂谈C二叉树的先序,中序,后序遍历以及线索二叉树的遍历头文件//*******************************************************************************//二叉树中的数据类型为ElemType//***…

EasyDarwin开源手机直播方案:EasyPusher手机直播推送,EasyDarwin流媒体服务器,EasyPlayer手机播放器...

在不断进行EasyDarwin开源流媒体服务器的功能和性能完善的同时&#xff0c;我们也配套实现了目前在安防和移动互联网行业比较火热的移动端手机直播方案&#xff0c;主要就是我们的 EasyPusher直播推送项目 和 EasyPlayer播放器项目&#xff1b; 先大概对EasyPusher和EasyPlayer…

以下不属于时序逻辑电路的有_电工电子技术(不建议浪费时间学习的科目)

(声明&#xff1a;本资料来自网络&#xff0c;侵权请告知删除。文末有全套高清版资料下载链接&#xff0c;敬请下载学习)2019年7月在天津召开的土力学及岩土工程年会上&#xff0c;有一场青年教师的土力学讲课竞赛&#xff0c;由我作一些点评&#xff0c;其中关于土颗粒与土骨架…

VS2010 + QT 5 +open inventor 环境配置

本科毕业设计做的是 随钻测量的井眼轨迹和测井曲线的三维显示 要求的环境是 QT Open Inventor 在寒假开学前&#xff0c;打算将环境配置好&#xff0c;开学后再正式编码实现&#xff0c;可是。。。。环境也没弄好 在简单的了解了QT和open inventor后&#xff0c;决定用vs…

12伏的蓄电池有几个单格组成_蓄电池的结构和识别

蓄电池是储备电能的一种直流装置。蓄电池充电时将电能转变为化学能&#xff0c;使用时内部化学能转变为电能向外输送给用电设备。蓄电池充放电过程是一种完全可逆的化学反应&#xff0c;因为蓄电池的充电和放电过程&#xff0c;可以重复循环多次&#xff0c;所以又称为二次电池…

第四周JAVA作业

本次作业实现实现了大文件快速拷贝 package copy; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class CopyFile { /** * param args */ public static void main(String[] args) { long startTime System.currentT…

2-jQuery - AJAX load() 方法【进阶篇】

第一篇的AJAX load() 方法过于简单&#xff0c;补充一下&#xff0c;完整的。 格式 $(selector).load(URL,data,callback); 源码 <!DOCTYPE html> <html><head><meta charset"utf-8" /><script type"text/javascript" src"…

前端js获取图片大小 扩展名_前端 JS 获取 Image 图像 宽高 尺寸

前端 JS 获取 Image 图像 宽高 尺寸简介项目中用到获取图片的原始尺寸&#xff0c;然后适配宽高&#xff1b;网上的大部分前端解决方案&#xff0c;都是new Image()后,在onload事件中获取image的尺寸。在图片数量较多的时候&#xff0c;这样的获取效率实在是低下。所有就有了这…

InnoDB还是MyISAM?

两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁.而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。 我作为使用MySQL的用户角度出发&#xff0c;Innodb和MyISAM都是比较喜欢的&#xff0c;但是从我目前运维的数据库平台要达到需求&#xff1a;9…

mysql linux 安装_mysql-5.7.28 在Linux下的安装教程图解

2.上传tar包到服务器到 /usr/local/src3.卸载系统自动的Mariadb rpm -qa | grep mariadb rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_644.检查是否有mysql存在rpm -qa|grep -i mysql5.查询是否还有mysql的目录find / -name mysql6.解压&#xff1a;tar -zxvf7.修改名称&…

有关软件工程的问题的分析和讨论及课后的作业3

个人电脑界面的演变。 1973年四月第一次操作是在施乐PARC Alto计算机完成。 该系统是第一个将现代图形用户界面中的所有元素结合起来的系统。 1981年6月施乐介绍了星&#xff0c;商业阿尔托的继任者。 显著特点&#xff1a;双点击图标&#xff0c;重叠窗口&#xff0c;对话框和…

mysql语句中模糊查询_关于sql、mysql语句的模糊查询分类与详解,包括基本用法和mapper.xml文件里插入写法...

欢迎猿类加qq:2318645572,共同学习进步实际例子&#xff1a;ssm框架:service业务层->dao层->mappers.xml->junit/test测试1:service业务层(package)Resourceprivate BooksDao bookDao;public List> Service(String serachtitle, String serachtype) {Map paramnew …

GOF设计模式之1:单例设计模式

1.单例设计模式核心作用&#xff1a; 保证一个类只有一个实例&#xff0c;并且提供了访问该实例的全局访问点 2.常见应用场景&#xff1a; window的任务管理器项目中读取配置文件一般也是一个单例模式数据库连接池的设计也是采用单例模式&#xff0c;因为数据库连接是一种数据库…

php 管理 mysql 数据库 代码_PHP5对Mysql5的任意数据库表的管理代码示例(三)

续&#xff1a;点击编辑一个条目会跳转至edit.php//edit.phpEditing an entry from the databaseEdit an entry$database "sunsite";$tablename $_REQUEST[tablename];echo "Data from $tablename";MySQL_connect("localhost","root"…

封装EF code first用存储过程的分页方法

一年半没有做过MVC的项目了&#xff0c;还是很怀念&#xff08;因为现在项目还是原来的ASPX&#xff09;&#xff0c;个人还是喜欢mvc&#xff0c;最近又开始重拾MVC&#xff0c;感觉既熟悉又陌生。 记录一下封装好的分页代码 首先先说下 我使用EF codefirst的目的. 是因为可以…