c++/pascal 最大方阵
问题描述小庆最近在玩一个游戏,在一个方阵中,相连在一起的一块正方形区域就叫做一个子区域,如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;
}
其他回答
其它网友回答:
# 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.
其它网友回答:
这个好像 很有难度啊