c++/pascal 最大方阵

原问题:c++/pascal 最大方阵
分类:编程开发 > 最后更新时间:【2017-07-26 21:29:49】
问题补充:

问题描述小庆最近在玩一个游戏,在一个方阵中,相连在一起的一块正方形区域就叫做一个子区域,如M3,5、M3,6、M3,7、M4,5、M4,6、M4,7、M5,5、M5,6与M5,7就矩阵M中从M3,5起的一个3×3的子区域。请帮小庆写一个程序,接受一个方阵(列数与行数相同),再接收一个已知的值K,请找出在给定方阵中值全部是K的最大方块子区域(也是个小方阵,行和列相同),报告这个子区域的大小。输入格式输入文件中第一行给出一个正整数n,n为方阵的行数和列数(1<=n<=200)。第二行是值K,剩下各行给出矩阵中各位置的值。输出格式输出文件只包含一个整数,即最大方块区域的行数或列数。

输入样例411111101111111111输出样例2

那位少侠来救助一下

最佳答案

这个是2008年安庆市编程竞赛试题,以下是C++的参考:

#include <iostream>

using namespace std;

int LargestBlock(int *m, int n, int k) //查找最大方阵

{

bool t = true;

int i = 0, j = 0, l = 0;

for(l = n; l >= 1; l--) //矩阵维数,从最大开始

{

for(i = 0; i <= n - l; i++)

{

for(j = 0; j <= n - l; j++)

{

t = true;

for(int x = i; x < i + l; x++)

{

for(int y = j; y < j + l; y++)

{

if(m[x * n + y] != k) //不为1退出此轮循环

{

t = false;

break;

}

}

if(t == false) break;

}

if(t == true) break;

}

if(t == true) break;

}

if(t == true) break;

}

return l;

}

int main()

{

int a[200 * 200], n, k;

int i, j;

cin >> n >> k;

for(i = 0; i < n; i++)

for(j = 0; j < n; j++)

cin >> a[i * n + j] ;

cout << LargestBlock(a, n, k) << endl;

return 0;

}

最佳答案由网友  whoami1978  提供
公告: 为响应国家净网行动,部分内容已经删除,感谢网友理解。
12

分享到:

其他回答

其它网友回答:
# Pascal Code: Program she; const max=10; var d,i,j,m,N:integer; A:array [1.10,1.10. write(A[i,j]:4); {输出填数} writeln;end; end else writeln('Input N error!'); end. # C C.

其它网友回答:
这个好像 很有难度啊