[软件工程] 查找二维数组最大子数组的之和 郭莉莉&李亚文
2014-03-19 17:20
337 查看
一。
在主函数中实现二维数组的输入、
代码主要函数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.运行结果
相关文章推荐
- 求二维整数数组最大子数组和
- 蓝桥杯 第三届C/C++预赛真题(7) 放棋子(水题)
- 学习:base64和图片。
- 一键u盘装系统 蓝屏
- 自我介绍先。。。。2014/3/9
- 面试常考的 group by +having 试题
- 某种序列(nyoj 114)
- HDU1007(解题报告)
- C#键盘事件处理父窗体子窗体
- 感觉差不多了。CLOUDSTACK的NAT,端口转发和防火墙结合穿透
- 敏捷开发---综述
- 两个PHP数组对比,计算新增了哪些值,删除了哪些值,共同拥有哪些值?
- 研究生阶段丢失的文件
- 法正(2):法雄
- Flex离线地图和在线谷歌地图实现<完整版>
- 动态ACL 推荐
- 开源中国iOS客户端学习——(一)Prefix.pch文件
- android 清除应用的缓存
- oracle忘记初始密码的解决方案
- GCC 中的inline关键字