题目描述
在一个正方形的灰度图片上,肿瘤是一块矩形的区域,肿瘤的边缘所在的像素点在图片中用0表示。其它肿瘤内和肿瘤外的点都用255表示。现在要求你编写一个程序,计算肿瘤内部的像素点的个数(不包括肿瘤边缘上的点)。已知肿瘤的边缘平行于图像的边缘。
输入
只有一个测试样例。第一行有一个整数n,表示正方形图像的边长。其后n行每行有n个整数,取值为0或255。整数之间用一个空格隔开。已知n不大于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
这个题是思路问题
- 从标准输入中读取正方形图像的边长n;
- 建立一个n×n大小的二维数组image来存储图像信息;
- 遍历二维数组image中的所有像素点:
- 如果该点的值是0,则说明该点在肿瘤边缘上,跳过该点的处理;
- 如果该点的值是255,同时满足它的相邻像素点(上下左右四个方向)至少有一个是0,则该点属于肿瘤内部;
- 统计属于肿瘤内部的像素点个数count,并输出。
//边缘的肯定不可能是肿瘤内部的点 所以可以跳过第一行和最后一行和第一列和最后一列
#include <stdio.h>
int main() {
int n;
scanf("%d", &n); // 读取正方形图像的边长
int image[n][n]; // 存储图像信息
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &image[i][j]);
}
}
int count = 0; // 统计肿瘤内部的像素点个数
for (int i = 1; i < n - 1; i++) {
for (int j = 1; j < n - 1; j++) {
if (image[i][j] == 255) {
if (image[i - 1][j] == 0 || image[i + 1][j] == 0 ||
image[i][j - 1] == 0 || image[i][j + 1] == 0) {
count++;
}
}
}
}
printf("%d\n", count);
return 0;
}