当前位置: 首页 > 编程日记 > 正文

结对开发--求二维数组的最大子数组

小组成员:信1201-1班  黄亚萍

          信1201-1班  袁亚姣

一、题目要求

    程序要使用的数组放在一个叫 input.txt 的文件中,  文件格式是:

          数组的行数,

          数组的列数,

          每一行的元素,  (用逗号分开)

          每一个数字都是有符号32位整数当然行数和列数都是正整数。

二、设计思路

在结对开发之体验中一维数组的子数组的和的最大值的基础上加以拓展:

    (1)当子数组的维数为1时,在M*N的数组中有M个子数组,直接用一维数组的处理办法求出其最大值;

    (2)当子数组的维数不为1时,第i行和第i+1行元素对应求和的方式,重新得到新的数组,重复(1)的操作,直到子数组就是原来的数组本身为止。

三、程序源代码

  1 #include"stdafx.h"2 #include <iostream>3 #include <fstream>4 using namespace std;5 # define M 1006 # define N 1007 int hang1=0;8 int hang2=0;9 int lie1=0;10 int lie2=0;11 int maxx = -100;12 int sum1(int k,int a[],int number)    //一维数组行数元素求和13 {14     int x=0;15     for(int i=k;i<=number+k-1;i++)    //数组元素的个数为number16     {17         x=x+a[i];18     }19     return x;20 }21 int sum2(int k,int a[M][N],int number,int num)   //二维数组列数元素求和22 {23     int x=0;24     for(int i=k;i<=number+k-1;i++)    25     {26         x=x+a[i][num];27     }28     return x;29 }30 int Largest1(int list[],int length)         //一维数组求数组的子数组的和的最大值31 {32     int sum[N];33     int i,j,max=-100;34     for(i=1;i<=length;i++)       //元素个数为i35     {    36         for(j=1;j<=length-i+1;j++)   //子数组的第j个元素,求最大值37         {38             sum[j]=sum1(j,list,i);39             if(sum[j]>=max) 40             {41                 max=sum[j];42             }43         }        44     }    45     return max;46 }47 48 void Largest3(int list[],int length)         49 {50     int sum[N];51     int i,j;52     for(i=1;i<=length;i++)       53     {    54         for(j=1;j<=length-i+1;j++)  55         {56             sum[j]=sum1(j,list,i);57             if(sum[j]>= maxx) 58             {59                 maxx=sum[j];60                 lie1 = j;61                 lie2 = j+i-1;62             }63         }        64     }    65 }66 67 int Largest2(int list[M][N],int number_x,int number_y)   //二维数组求数组的子数组的和的最大值68 {69     int max,m;70     int max2[N];71     int sum[M][N];72     int max3[N];73     for(int i=1;i<=number_x;i++)   //数组行数为i74     {75         cout<<"子数组行数为"<<i<<","<<endl;76 77         for(m=1;m<=number_x-i+1;m++)    //子数组的第一行为原数组的第m行78         {  79             cout<<""<< m <<"行的最大值为:";80             for(int j=1;j<=number_y;j++)    //子数组第j列元素81             {            82                 sum[i][j]=sum2(m,list,i,j);                    83             }    84             Largest3(sum[i],number_y);85             max2[m]=Largest1(sum[i],number_y);    //数行数为i时子数组第m行的最大值86             cout<<max2[m]<<endl; 87             max3[i]=max2[1];88             for(int k=1;k<=i;k++)     89             {90                 if(max2[k]>=max3[i])91                 {92                     max3[i]=max2[k];93                     hang1=m;94                 }95             }            96         }        97     }98     max=max3[1];99     for(int n=1;n<=number_x;n++)     
100     {
101         if(max3[n]>=max)
102         {
103             max=max3[n];
104             hang1=m;
105             hang2=n;      //子数组的行数为第m行到第m+n行
106 
107         }
108     }            
109     return max;
110 }
111 void show(int arry[N][N],int length1,int length2)   //输出矩阵
112 {
113     for(int i=1;i<=length1;i++)
114     {
115         for(int j=1;j<=length2;j++)
116         {
117             cout<<arry[i][j]<<"\t";
118         }
119         cout<<endl;
120     }
121 }
122 int main(int argc, char* argv[])
123 {
124     int i,number_hang,number_lie;
125     int list[M][N];
126 
127     ifstream infile("input.txt");
128     if(!infile)
129         cout<<"读取失败!"<<endl;
130     else
131     {
132         infile>>number_hang>>number_lie;
133         for(int i=1;i<=number_hang;i++)
134         {
135             for(int j=1;j<=number_lie;j++)
136             {
137                 infile>>list[i][j];
138             }
139         }
140     }
141 
142     cout<<"以矩阵形式展示为:"<<endl;
143     show(list,number_hang,number_lie);
144     cout<<endl;
145     cout<<"最大值为:"<<Largest2(list,number_hang,number_lie)<<endl;
146     cout<<endl;
147     cout<<"对应的最大值的子数组为:"<<endl;
148 
149     for(i=hang1-1;i<hang2+hang1-1;i++)
150     {
151         for(int j=lie1;j<=lie2;j++)
152         {
153             cout<<list[i][j]<<"\t";
154         }
155         cout<<endl;
156     }
157     cout<<endl;
158     return 0;
159 }

四、结果截图

五、实验总结

在这次合作过程中,我们充分体会到了结对的快乐。之前我们自己做可能有许多不会的地方,两个人在一起取长补短,一起商量。既提高了代码的质量,又提高了我们自己的水平;

我们会比一个人想的更加全面,只有先缕清思路,有一个清晰明白的流程,才能顺利的完成代码的编辑,调试,测试与结尾,才能达到事半功倍的效果。

附件:

      

转载于:https://www.cnblogs.com/yuanyajiao/p/4369515.html

相关文章:

实验二 164 张增进

一、实验目的 掌握基于覆盖理论与基本路径的基本白盒测试方法和实践 二、实验要求 运用逻辑覆盖测试的覆盖准则设计被测程序的测试用例&#xff0c;并运行测试用例检查程序的正确与否&#xff0c;给出程序缺陷小结。 三、实验内容 根据各位同学自己的被测程序&#xff0c;分别作…

微信小程序之录音与播放功能(完整示例demo)

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 正文&#xff1a; 源码简介&#xff1a; 点击按钮实现相应效果 ↓↓↓↓↓↓↓↓ //test.wxml <button bindtapstart>开始录音</button> <button bindtapplay>播放录音</butt…

为什么您不需要精通数学就可以学习编程

by Pau Pavn通过保罗帕文(PauPavn) 为什么您不需要精通数学就可以学习编程 (Why you don’t need to excel at math to learn how to program) This is probably one of the greatest misconceptions I’ve ever heard.这可能是我听过的最大的误解之一。 If you want to prog…

Android动态加载jar/dex

http://www.cnblogs.com/over140/archive/2011/11/23/2259367.html 加载jar boolean bool new File("/sdcard/test.jar").exists();DexClassLoader cl new DexClassLoader("/sdcard/test.jar", this.getCacheDir().getAbsolutePath(), null, this.getCla…

使用μJava进行变异体测试

一、环境配置mujava运行的是Java程序&#xff0c;Java的环境配置见EclipseJDK配置那点事。 将下载的mujava相关文件放到一个文件夹&#xff0c;文件夹放到C:\muJava 添加mujava环境变量CLASSPATH&#xff1a; C:\mujava\mujava.jar;C:\mujava\openjava.jar;C:\mujava\junit.jar…

【微信小程序之画布】一:canvas组件

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 正文&#xff1a; 此文章主要是对canvas组件的介绍与基本的使用。在组件中绘画了一条固定的直线。 我们先了解一下canvas组件&#xff1a; wxml: <canvas classmyCanvas canvas-id"myCanvas…

JavaScript的“ this”通过成立一个高中乐队来解释

by Kevin Kononenko凯文科诺年科(Kevin Kononenko) JavaScript的“ this”通过成立一个高中乐队来解释 (JavaScript’s “this” Explained By Starting A High School Band) If you have ever been in a band, had a friend that started a band, or seen a corny 80s movie …

Ubuntu 16.04 安装Django

> pip install django1.10.3......或者:> pip3 install django1.10.3&#xff08;我采用&#xff09;......或者:>python3 -m pip install django1.10.3......或者:pip install -i https://pypi.douban.com/simple/ django1.10.3......如果你只安装一个版本的 Python,…

【微信小程序之画布】三:手指触摸绘画椭圆

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 正文&#xff1a; 功能&#xff1a;根据手指触摸绘画一个椭圆路径--> 起点为手指开始触摸时的坐标&#xff0c;终点为手指触摸结束时的坐标 效果图&#xff1a; 组件属性的描述在上一节中描述过了&…

ACdream 1099——瑶瑶的第K大——————【快排舍半,输入外挂】

瑶瑶的第K大Time Limit:2000MS Memory Limit:128000KB 64bit IO Format:%lld & %llu Submit Status Practice ACdream 1099Description 一天&#xff0c;萌萌的妹子--瑶瑶(tsyao)很无聊&#xff0c;就来找你玩。可是你们都不知道玩什么。。。尴尬了一阵子&#xff…

开源贡献 计算_如何克服恐惧并为开源做贡献

开源贡献 计算Are you a new developer? Or maybe even just an old-timer who has been in a company for ten years, working on an in-house project, and now you’re thinking, “Hey, I’ve been in my box a long time. What’s new out there?” I have been like th…

Android学习笔记进阶十一图片动画播放(AnimationDrawable)

大家平时见到的最多的可能就是Frame动画了&#xff0c;Android中当然也少不了它。它的使用更加简单&#xff0c;只需要创建一个 AnimationDrawabledF对象来表示Frame动画&#xff0c;然后通过addFrame 方法把每一帧要显示的内容添加进去&#xff0c;并设置播放间隔时间&#xf…

JS 把url的参数解析成对象

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 正文&#xff1a; 实现思路&#xff1a;请看log和打印结果 // url参数解析 function getUrlkey(url) {var params {};var urls url.split("?"); console.log(1_分割url:,…

Objective-C代码的文件扩展名

转载于:https://www.cnblogs.com/123qw/p/4375299.html

公司成立两周年感言_对我的副项目成立一周年的一些反思

公司成立两周年感言by Will Abramson威尔艾布拉姆森(Will Abramson) 对我的副项目成立一周年的一些反思 (Some reflections on my side project’s first anniversary) My side project turns one this month. It has been a real learning roller coaster.我的副业这个月变成…

2017.4.18 静态代码分析工具sonarqube+sonar-runner的安装配置及使用

配置成功后的代码分析页面&#xff1a; 可以看到对复杂度、语法使用、重复度等等都做了分析&#xff0c;具体到了每一个方法和每一句代码。 四种使用方式&#xff1a; sonarqube sonar-runnersonarqube mavensonarqube eclipsesonarqube IDE IntelliJ使用方式1 &#xff1a…

c中结构体的4种定义

1、常规的标准方式&#xff1a; 1 #include <stdio.h> 2 3 struct student{ 4 int age; 5 float score; 6 char sex; 7 }; 8 9 int main(int argc, char **argv) 10 { 11 struct student studenta { 12 30, 13 79.5, 14 …

js 时间戳与日期处理集合

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 正文&#xff1a; 一&#xff1a;获取当前日期 使用方式&#xff1a;console.log(util.formatTime()) 打印结果&#xff1a;2018/04/24 11:06:45 // 获取当前日期 function formatTime() {var date…

超赞网站推荐_字体(更多)超赞-标志性发明

超赞网站推荐by Pubudu Dodangoda通过Pubudu Dodangoda 字体(更多)超赞-标志性发明 (Font (More) Awesome — an iconic invention) Whether you are building a website, a mobile app, or even a standalone app, there are few things you can never escape. The proper us…

JAVA中的垃圾回收机制以及其在android开发中的作用

http://blog.csdn.net/xieqibao/article/details/6707519 这篇文章概述了JAVA中运行时数据的结构&#xff0c;以及垃圾回收机制的作用。在后半部分&#xff0c;描述了如何检测和定位ANDROID程序是否内存溢出。转载于:https://www.cnblogs.com/u3shadow/p/4379336.html

微信小程序把后台传过来的数组坐标展示在地图上

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 正文&#xff1a; 功能实现&#xff1a; 1. 根据后台传递过来的数据&#xff0c;包括地址名字&#xff0c;经纬度坐标等都展示在map组件上&#xff1b; 2. 点击相应地址实现用户当前位置导航至点击的…

Flask-login Question

1 未登录访问鉴权页面如何处理&#xff1f; 如果未登录访问了一个作了 login_required 限制的 view&#xff0c;那么 Flask-Login 会默认 flash一条消息&#xff0c;并且将重定向到login_view&#xff0c;如果你没有指定login_view&#xff0c;那么 Flask-Login 将会抛出一个 4…

愉快的舞会c++_如何在5分钟内建立一个令人愉快的加载屏幕

愉快的舞会cFirst, here is what we will build. Set your timer!首先&#xff0c;这是我们将要建立的。 设置您的计时器&#xff01; Does this look familiar?这看起来很熟悉吗&#xff1f; If yes, that’s because you’ve seen this somewhere — Slack!如果是&#xf…

有关C/C++中,表达式计算顺序的问题,以及表达式内部变量“副作用”问题(转)...

经常可以在一些讨论组里看到下面的提问&#xff1a;“谁知道下面C语句给n赋什么值&#xff1f;”m 1; n mm;最近有位不相识的朋友发email给我&#xff0c;问为什么在某个C系统里&#xff0c;下面表达式打印出两个4&#xff0c;而不是4和5&#xff1a;a 4; cout << a &…

HDU 3001

题目中说明每个城市至少要走一次&#xff0c;至多走2次&#xff0c;因此要用到三进制压缩&#xff0c;然后就是状态转移方程了。 这道题就处理三进制的地方麻烦一点。同时注意&#xff0c;在选择最小长度时&#xff0c;一定是要每一个点都经过至少一次的&#xff0c;即是状态的…

微信小程序 侧滑效果实现

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 正文&#xff1a; 先看效果图&#xff1a; 源码&#xff1a; <view wx:if{{if_show}} class{{show_centent?"show":"hide"}} /> <button bindtapbtn>展示 or 隐藏&l…

im和音视频开发哪个更好_如何阅读成为更好的开发者的方式

im和音视频开发哪个更好by nolan grace通过诺兰格雷斯 如何阅读成为更好的开发者的方式 (How to read your way to becoming a better developer) If you want to get better at programming, there are two things you need to do:如果您想提高编程水平&#xff0c;则需要做两…

MVC3学习 四 EF删除操作

由于EF的框架是4.1的&#xff0c;所以现在如果想更新部分字段的话&#xff0c;只能从数据库中查出一次数据&#xff08;不用查的方法还没找到&#xff0c;需要继续研究&#xff09;&#xff0c;不能像5.1的版本可以不用查。 更新的Action需要用到[HttpGet]和[HttpPost]&#xf…

ThinkPHP5.0中Redis的使用和封装(原创)

Redis是一种常用的非关系型数据库,主要用作数据缓存,数据保存形式为key-value,键值相互映射.它的数据存储跟MySQL不同,它数据存储在内存之中,所以数据读取相对而言很快,用来做高并发非常不错. ThinkPhP5.0自带了Redis扩展,在使用之前先下载php_redis.dll 网址 http://windows.p…

【微信小程序之画布】四:手指触摸绘波浪线

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 正文&#xff1a; 功能&#xff1a;根据手指触摸绘画一条直线路径--> 起点为手指开始触摸时的坐标&#xff0c;终点为手指触摸结束时的坐标 效果图&#xff1a; 上代码&#xff1a; <canvas clas…