【描述】
在一个正方形的灰度图片上,肿瘤是一块矩形的区域,肿瘤的边缘所在的像素点在图片中用0表示。其它肿瘤内和肿瘤外的点都用255表示。现在要求你编写一个程序,计算肿瘤内部的像素点的个数(不包括肿瘤边缘上的点)。已知肿瘤的边缘平行于图像的边缘。
【输入】
只有一个测试样例。第一行有一个整数,表示正方形图像的边长。其后行每行有个整数,取值为0或255。整数之间用一个空格隔开。已知不大于1000。
【输出】
输出一行,该行包含一个整数,为要求的肿瘤内的像素点的个数。
【样例输入】
5
255 255 255 255 255
255 0 0 0 255
255 0 255 0 255
255 0 0 0 255
255 255 255 255 255
【样例输出】
1
【提示】
如果使用静态数组来表示图片数据,需要将该数组定义成全局变量。
【参考程序】
C++版本
- #include <iostream>
- using namespace std;
- int main()
- {
- //只需要得到起始位置的点,和最后位置的点,即可算出可容纳几个255
- int n, arr[1005][1005], ax = 0, ay = 0, bx = 0, by = 0;
- cin >> n;
- bool first = true;
- for (int i = 1; i <= n; i++)
- {
- for (int j = 1; j <= n; j++)
- {
- cin >> arr[i][j];
- if (arr[i][j] == 0)
- {
- if (first)
- {
- ax = i;
- ay = j;
- first = false;
- }
- bx = i;
- by = j;
- }
- }
- }
- if (bx > ax && by > ay)
- {
- cout << (by - ay - 1) * (bx - ax - 1);
- }
- else
- {
- cout << 0;
- }
- return 0;
- }