查找二维数组中子数组之和最大值 郭莉莉&&李亚文
2014-03-19 17:14
218 查看
一。
在主函数中实现二维数组的输入、
代码主要函数maxson(),主要利用for()循环先查找出最大字数组的四角的坐标xmin,xmax,ymin,ymax来确定最大子数组,
在循环中算出之和,编写过程中行列的值赋值错误,但经过调试查找出来了;后来在输出最大子数组的地方遇到麻烦,
考虑不周全用普遍的 if(j%n==0)cout<<endl;来进行换行,导致出现错误,应改为if(j%n==m),m为最大子数组的第一列,
源代码:
2.运行结果
在主函数中实现二维数组的输入、
代码主要函数maxson(),主要利用for()循环先查找出最大字数组的四角的坐标xmin,xmax,ymin,ymax来确定最大子数组,
在循环中算出之和,编写过程中行列的值赋值错误,但经过调试查找出来了;后来在输出最大子数组的地方遇到麻烦,
考虑不周全用普遍的 if(j%n==0)cout<<endl;来进行换行,导致出现错误,应改为if(j%n==m),m为最大子数组的第一列,
源代码:
#include <iostream> using namespace std; int a[100][100]; int maxson(int M,int N) { int xmin,xmax,ymin,ymax; int m,n,p,q,t; int i,j,max=a[0][0],sum=0; for(xmin=0;xmin<M;xmin++) for(xmax=xmin+1;xmax<=M;xmax++) for(ymin=0;ymin<N;ymin++) for(ymax=ymin+1;ymax<=M;ymax++) { sum=0; for(j=xmin;j<xmax;j++) for(i=ymin;i<ymax;i++) { sum=a[i][j]+sum; } if(max<sum) { max=sum; m=xmin; n=xmax; p=ymin; q=ymax; } } cout<<"最大子数组为"<<endl; t=n-m; for(i=p;i<q;i++) for(j=m;j<n;j++) { if(j%t==m) cout<<endl; cout<<a[i][j]<<'\t'; } cout<<endl; return max; } void main() { int M=0,N=0,i,j; while(!M) //检查输入的M,N否则重新输 { cout<<"数组的行数: "; cin>>M; if(M<=0) { M=0; cout<<"行数必须大于0"<<endl; } } while(!N) { cout<<"数组的列数: "; cin>>N; if(N<=0) { cout<<"列数必须大于0"<<endl; N=0; } cout<<"输入数组的值:"; //输入二维数组的值 for(i=0;i<M;i++) for(j=0;j<N;j++) { cin>>a[i][j]; } } cout<<"您输入的数组为:" ; //输出数组 for(i=0;i<M;i++) for(j=0;j<N;j++) { if(j%N==0) cout<<endl; cout<<a[i][j]<<'\t'; } cout<<endl; cout<<"子数组和为:"<<maxson(M,N)<<endl; }
2.运行结果
相关文章推荐
- [软件工程] 查找二维数组最大子数组的之和 郭莉莉&李亚文
- 求整形数组中子数组和的最大值 郭莉莉、李亚文
- 二维数组, 二分法查找数组元素下标 快速查找数组最大值 数组作为实参的问题
- [java学习笔记]java语言基础概述之数组的定义&常见操作(遍历、排序、查找)&二维数组
- 求二维数组中子数组和中最大的值,及子数组
- 二维数组查找(普通数组&vector数组)
- 查找二维数组list[][]中的最大的子数组的和
- 求二维数组的最大子数组———曹玉松&&蔡迎盈
- 查找数组中子数组最大和
- 求二维数组最大子数组和 刘博&徐梦迪
- 从数组中查找出最大最小两数的log(n)算法
- 二维数组中查找 有序数组合并 效率O(n)
- Java数组遍历、求最大值、选择排序、冒泡排序、二分查找
- 二维数组中,值最大的连续子数组
- 求二维数组每列中最大元素,并依次放入一位数组中
- 大数据数组查找最大的100个数据
- 查找数组中最大的两个数(Find two Largest Number)
- 返回一个二维数组最大联通子数组的和
- PHP查找数值数组中不重复最大和最小的10个数的方法
- 数组的遍历,获取最大值,数组的反转,数组中元素的查找、冒泡排序、选择排序、折半查找法