结对开发--求二维数组的最大子数组
小组成员:信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
结对开发--求二维数组的最大子数组相关推荐
- 结对开发——求二维环形数组所有子矩阵最大和的问题
一.题目要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. ...
- 求一个已知二维数组的最大子数组和(廖强,司宇)
小组成员:司宇,廖强 设计流程: 设计界面: 程序设计:1.封装一个求二维整数组最大子数组和的子程序: 2.设计一个主函数,主函数可以调用子函数: 3.在主函数中添加代码,使主函数可以调用一个 ...
- 求一个已知二维数组的最大子数组和(司宇,廖强)
小组成员:司宇,廖强 设计流程: 设计界面: 程序设计:1.封装一个求二维整数组最大子数组和的子程序: 2.设计一个主函数,主函数可以调用子函数: 3.在 ...
- 结对开发2(求二维数组的最大子数组和)
一,题目要求: 输入一个二维数组,求出此二维数组的最大子数组和. 二,设计思路: 利用for循环进行遍历,求出数组中每一个子数组的和,最终求出这些子数组的最大的一个值.程序中利用了调用函数,被调函数分 ...
- 求二维整数数组中最大子数组的和(结对作业)
题目:返回一个二维整数数组中最大子数组的和 要求:(1)输入一个二维整形数组,数组里有正数也有负数. (2)二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和. (3)求所有子数组的和最大 ...
- 软件工程——求二维数组所有子矩阵的和的最大值
题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为 ...
- 返回一个二维整数数组中最大子数组的和(二人结对)
题目:返回一个二维整数数组中最大子数组的和 要求:1.输入一个二维整型数组,数组里有正数也有负数. 2.二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和. 3.求所有子数组的和的最大值. ...
- 求二维数组中最大子数组的和
任国庆 张博 之前我们讨论了在一维数组中求最大子数组的和,在此基础上我们开始讨论二维数组的最大子数组. 求二维数组的最大子数组思想是建立在以为数组.首先将数组的第一列看成一个一维数组,找到该列的最大 ...
- 求二维数组的转置矩阵
1 /*===================================== 2 求二维数组的转置矩阵 3 输入 4 两个整数n和m 5 n行m列的二维数组 6 输出 7 输出该二维数组的转置矩 ...
最新文章
- How can I create an Asynchronous function in Javascript?
- Swagger UI
- poj 1987 树的分治
- 硬件:关于ARM的22个常用概念!
- 获取人口_「微科普」14亿人口数据是如何得到的?
- python正确的输入语句_Python If语句If输入是某个字符串
- PHP+Ajax点击加载更多内容 -这个效果好,速度快,只能点击更多加载,不能滚动自动加载...
- CentOS 7 搭建 L2TP/Ipsec
- android 沙盒 ios,iOS之沙盒机制
- Windows源码编译运行pgAdmin4
- 科赫雪花java_科赫雪花的Java递归实现
- deepin安装后wps提示缺少字体
- 新美域杂志新美域杂志社新美域编辑部2022年第6期目录
- 吉林大学计算机学院三等奖学金,吉林大学奖学金评定方案.doc
- JavaScript大师Nicholas C. Zakas又一大作出中文版了
- Texstudio + sumatraPDF 正反向搜索关联设置
- hadoop组件---面向列的开源数据库(九)--python--python使用thrift连接hbase
- 【Linux】Ubuntu16.04使用拾遗2
- LeetCode——1646. 获取生成数组中的最大值
- 孝经白话:诸侯章第三
热门文章
- Python基础02-Python基础
- bigquery使用教程_如何使用Python和Google BigQuery构建机器人以自动执行您的笨拙任务...
- hacktoberfest_Hacktoberfest 2018:如何获得免费衬衫—即使您是编码新手
- 数据结构(队列实现篇)
- 图解eclipse+myeclipse完全绿色版制作过程
- 关于Android H5混合开发遇到的问题
- 597个智慧城市相关试点将临大考
- Verilog与SystemVerilog编程陷阱:怎样避免101个常犯的编码错误
- 跨平台抓包软件,可以替代Fiddler
- 一个JS对话框,可以显示其它页面,