Task 4.4二维环形数组求最大子矩阵之和
任务:
//二维环形数组求最大子矩阵
//刘子晗 2015/4/22 #include<iostream>
#include<time.h>
using namespace std; void main()
{
int m, n, a[][], b[][],i, j ;
cout << "请输入矩阵的行数和列数:" << endl;
cin >> m >> n;
srand((unsigned)time(NULL));
cout << "产生的随机数组为:" << endl;
for (i = ; i < m; i++)
{
for (j = ; j < n; j++)
{
a[i][j] = rand() % - ;
cout << a[i][j] << " ";
}
cout << endl;
}//输出随机产生的矩阵 int max = a[][];
for (i = ; i < m ; i++)
{
for (j = ; j < n; j++)
{
a[i][j + n] = a[i][j];
}
}//对二维数组进行扩展,横向延长一倍 cout << "扩展后环形数组为:" << endl;
for (i = ; i < m; i++)
{
for (j = ; j < *n-; j++)
{
cout << a[i][j] << ' ';
}
cout << endl;
}//输出扩展之后的新数组 for (i = ; i < ; i++)
{
b[][] = a[][];
for (j = ; j < *n -; j++)
{
if (a[][j - ] < )
{
b[][j] = a[][j];
}
else
{
b[][j] = b[][j - ] + a[][j];
}
}
}//对第一行的数作为一个数组求其最大连续子数组之和 for (i = ; i < m; i++)
{
for (j = ; j < ; j++)
{
if (a[i - ][] < )
{
b[i][] = a[i][];
}
else
{
b[i][] = b[i - ][] + a[i][];
}
}
}//对第一列的数作为一个数组,求其连续子数组的最大和 for (i = ; i<m; i++)
{
for (j = ; j<*n-; j++)
{
if (b[i - ][j - ]<)
{
if (b[i - ][j] >= && b[i][j - ] >= )
{
if (b[i][j - ] >= b[i - ][j])
{
b[i][j] = b[i][j - ] + a[i][j];
}
else
{
b[i][j] = b[i - ][j] + a[i][j];
}
}
else if (b[i - ][j] >= && b[i][j - ] <= )
{
b[i][j] = b[i - ][j] + a[i][j];
}
else if (b[i - ][j] <= && b[i][j - ] >= )
{
b[i][j] = b[i][j - ] + a[i][j];
}
else
{
b[i][j] = a[i][j];
}
}
else
{
if (b[i - ][j] >= && b[i][j - ] >= )
{
b[i][j] = a[i][j] + b[i - ][j] + b[i][j - ] - b[i - ][j - ];
}
else if (b[i - ][j] >= && b[i][j - ] <= )
{
b[i][j] = a[i][j] + b[i - ][j] - b[i - ][j - ];
}
else if (b[i - ][j] <= && b[i][j - ] >= )
{
b[i][j] = a[i][j] + b[i][j - ] - b[i - ][j - ];
}
else
{
b[i][j] = a[i][j];
}
}
}
}//求整个矩阵中从首个元素到当前元素的数组和的最大值,并将该值赋给当前地址 cout << "子矩阵的和数组为:" << endl;
for (i = ; i<m; i++)
{
for (j = ; j< * n - ; j++)
{
cout << b[i][j] << " ";
}
cout << endl;
}//输出新生成的和数组 cout << endl;
for (i = ; i<m; i++)
{
for (j = ; j< * n - ; j++)
{
if (b[i][j]>max)
{
max = b[i][j];
} }
}//求数组中的最大元素
cout << "最大子矩阵和为:" << max << endl;
}
3.结果截图:


4.总结:(1)再一次感觉到拆分问题的重要性,无论题目有多复杂,当拥有可以拆分问题的能力的时候,一一击破然后再将其有机地组合起来,一切问题都会迎刃而解;
(2)题目在一步一步地增加难度的时候,如果能把之前的每个相对简单的程序都弄明白之后,组合成的难题反而却是非常简单的。所以每次完成一个程序一定要完全把它想清楚,非以方便以后去使用其中的内容和思想;
(3)要善于总结,每一次总结回顾总能发现不一样的问题,得到不一样的体会。
Task 4.4二维环形数组求最大子矩阵之和的更多相关文章
- Codeforces Round #369 (Div. 2) A. Bus to Udayland【字符串/二维字符数组求连起来的座位并改为其他字符】
A. Bus to Udayland time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 计算机二级-C语言-程序填空题-190109记录-对二维字符串数组的处理
//给定程序,函数fun的功能是:求出形参ss所指字符串数组中最长字符串的长度,将其余字符串右边用字符*补齐,使其与最长的字符串等长.ss所指字符串数组中共有M个字符串,且串长<N. //重难点 ...
- PHP二维关联数组的遍历方式
采用foreach循环对二维索引数组进行遍历,相对来讲速度更快,效率更高,foreach循环是PHP中专门用来循环数组的.实例也相对简单,多加练习,想清楚程序运行逻辑即可. <?php $arr ...
- C++ 指针二维数组, C++二维指针数组笔记
C++ 二维动态数组 一. 已知第一维 #include <iostream> using namespace std; int main(int argc, char const *ar ...
- 子串查询(二维前缀数组) 2018"百度之星"程序设计大赛 - 资格赛
子串查询 Time Limit: 3500/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Subm ...
- 二维字符数组利用gets()函数输入
举例: ][]; ;i<;i++) gets(a[i]); a是二维字符数组的数组名,相当于一维数组的指针, 所以a[i]就相当于指向第i个数组的指针,类型就相当于char *,相当于字符串.
- 分配一维动态数组or 二维动态数组的方法以及学习 new 方法or vector
先来个开胃菜 // 使用new动态分配存储空间 #include<iostream> using std::cout; int main() { // 第1种方式 int *a=new i ...
- go 动态数组 二维动态数组
go使用动态数组还有点麻烦,比python麻烦一点,需要先定义. 动态数组申明 var dynaArr []string 动态数组添加成员 dynaArr = append(dynaArr, &quo ...
- 【C/C++】二维数组的传参的方法/二维字符数组的声明,使用,输入,传参
[问题] 定义了一个子函数,传参的内容是一个二维数组 编译提示错误 因为多维数组作为形参传入时,必须声明除第一位维外的确定值,否则系统无法编译(算不出偏移地址) [二维数组的传参] 方法一:形参为二维 ...
随机推荐
- SEO优化上首页之搜索引擎用户需求理解
经过前面<搜索引擎原理SEO优化上首页之网络蜘蛛Spider>和<搜索引擎原理SEO优化上首页之内容处理与创建索引>介绍,搜索引擎已经完成页面抓取和分析,并把原始页面.索引等信 ...
- 补交20145226蓝墨云班课 -- MyCP
蓝墨云班课 -- MyCP.java 具体描述: 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt ...
- REST API 开发
本文我们将使用Spring MVC 4实现 CRUD Restful WebService , 通过RestTemplate写一个 REST 客户端,定义这些服务. 我们也可以通过外部的一些客户端来测 ...
- 【敏捷】7.showcase,开发中必须引起重视的小环节
有人说,测试者来自火星,开发者来自金星.这是因为软件测试员和软件开发者就好比一对冤家,里面的缘由说不清也道不明.开发代表着创造,而测试则代表着摧毁,因为测试的目的就是以各种方式不断地从开发出的产品中发 ...
- linux下的静态库与动态库
目录 静态库 定义: 生成及使用方法: 静态库的优缺点 动态库 定义: 生成及使用方法: 动态库优缺点: 静态库 先说说我们为什么需要库? 当有些代码我们大量会在程序中使用比如(scanf,print ...
- TensorFlow Python3.7环境下的源码编译(一)环境准备
参考: https://blog.csdn.net/yhily2008/article/details/79967118 https://tensorflow.google.cn/install/in ...
- Unity生成简易二维码
最近项目需求,需要在Unity中动态生成二维码.所以就研究了一下,下面把动态生成二维码的方法向大家分享一下. 第一种方法 需要一个 ZXing.dll文件. 下载地址我会在文章结尾给出. 直接将下载好 ...
- Laya资源加载小记
Laya.Loader负责资源的加载逻辑,被LoaderManager管理. Laya支持多种类型资源加载,也支持自定义类型加载.不同类型的加载方式可能不同. Laya.Loader缓存已经被加载过得 ...
- NIO - Buffer
NIO —— Buffer源码分析 Buffer的类结构 底层的基础类是抽象类-Buffer,其中定义了四个变量:capacity(容量),limit(限制),position(位置),mark(标记 ...
- 帝国cms后台集成ueditor编辑器
我更换成百度编辑器的原因有以下几点:1.使用百度编辑器的图片粘贴上传功能,这个功能实在是太有必要了,有开发的过程中或上传的过程中,通常用qq直接截图,直接放到文章上面,避免了再放到本地保存的情况,真是 ...