博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(一一〇)二维数组里找零最多的题目
阅读量:6213 次
发布时间:2019-06-21

本文共 1725 字,大约阅读时间需要 5 分钟。

题目 - 最大零矩阵(附加题)

描述

有一个二位数组 m(<100)行, n(<100) 列,其元素为不大于100的非负整数。现要找元素值均为0的最大子二维数组,其中行相邻,列也相邻,行数与列数之积最大(即,所含0元素最多),输出该最大积。例如:

2 5 0 0 8 11 15

3 0 0 0 0 12 16

7 0 0 0 0 13 17

8 0 0 7 1 14 18

4 0 0 0 0 0 0

6 0 0 0 0 0 0

这是6行,7列构成的二维数组,其中:由第4~5行(最后2行),第1~6列(最后6列)构成的子数组最大,共有12个0元素,因此,应该输出 12。其它情况下的子数组都不多于12个0元素,例如,第1~5行与第1~2列构成子数组为第二大数组,含有10个0元素。

关于输入

第一行,m 和 n 的值,以空格间隔,m 和 n 均为 不大于 100 的正整数 之后,共 m 行,每行共 n 个元素,其间用空格间格。

关于输出

输出,最大零元素子二维数组所含的 0 元素个数,如果没有0元素,则输出0。

例子输入

6 7

2 5 0 0 8 11 15

3 0 0 0 0 12 16

7 0 0 0 0 13 17

8 0 0 7 1 14 18

4 0 0 0 0 0 0

6 0 0 0 0 0 0

例子输出

12

 

#include
#include
using namespace std;int main(){ int m; int n; ifstream file; file.open("abc.txt"); file >> m; file >> n; unsigned short **pa = new unsigned short*[n];//new一个指针,指向有n个元素指针数组 for (int i = 0;i < m;i++) pa[i] = new unsigned short[n];//每次new一个有n个元素的short数组,并让x[i]指向他 //pa[m][n]为这个二维数组 for (int i = 0;i < m;i++)//从文件读入二维数组 for (int j = 0;j < n;j++) file >> pa[i][j]; for (int i = 0;i < m;i++)//输出二维数组 { for (int j = 0;j < n;j++) { cout << pa[i][j]; cout << " "; } cout << endl; } int x = 0;//x,y为每次查找时的基准坐标 int y = 0; int total_max = 0;//total_max为最多时的0数 int total_1 = 0;//往右偏移0的个数 int total_2 = 0;//往下偏移0的个数 int total_3 = 1; int X, Y;//X,Y为用于记录变量的坐标 for (x = 0;x < n;x++) { for (y = 0;y < m;y++) { total_1 = total_2 = 0; total_3 = 1; X = x, Y = y;//将基准值赋给X和Y if (pa[Y][X] != 0)continue;//如果这个坐标不为0,则没考虑的意义,进入下一次循环 else if (X > 0 && Y>0) //假如这个坐标,x-1的位置和y-1的位置都是0,那么他必然被下面的循环判定过。如果只有一个为0,可能这个坐标往一个方向还是有可能的(所以还存在再度优化可能) { if (pa[Y - 1][X] == 0 && pa[Y][X - 1] == 0)break; } while (X

总结:

①之前一直纠结没出结果。原因在于,YX在偏移后,可能过界的问题。例如6x7的矩阵,X坐标如果是7,则已经在界外了。因此在偏移后,应该加入过界检测,如果过界,则停止这种行为。

转载地址:http://avcja.baihongyu.com/

你可能感兴趣的文章
xshell免费版下载安装
查看>>
基于moment写一个滑动日历
查看>>
移动端:对高度自适应的输入框说不~
查看>>
android开源新闻小程序、3D翻转公告效果、小说检索、Kotlin开发TODO清单等源码...
查看>>
PHP算法之判断是否是质数
查看>>
Android 系统开发_核心机制篇 -- 深入钻研 Handler(用法)
查看>>
promise学习(1)
查看>>
幂等的实现方案
查看>>
认识Java泛型
查看>>
node thread.sleep实现
查看>>
H5剪切板功能
查看>>
Spring Boot 参考指南(消息传递)
查看>>
如何在 Linux 上通过 C API 判断给定的 fd 的类型?
查看>>
Linux(CentOS)软件管理(2)- yum 在线安装
查看>>
重新定义数据库的时刻,阿里云数据库专家带你了解POLARDB
查看>>
【跃迁之路】【469天】刻意练习系列228(2018.05.20)
查看>>
如何修复UITextField在iOS10文字下沉问题
查看>>
一个简单的 laravel5 + vue 单页面博客
查看>>
前端进阶:二进制数据的操控----附项目代码
查看>>
阿里Java研发工程师实习面经,附面试技巧
查看>>