水题 J

一张CT扫描的灰度图像可以用一个N*N(0 < N <= 100)的矩阵描述,矩阵上的每个点对应一个灰度值(整数),其取值范围是0-255。我们假设给定的图像中有且只有一个肿瘤。在图上监测肿瘤的方法如下:如果某个点对应的灰度值小于等于50,则这个点在肿瘤上,否则不在肿瘤上。我们把在肿瘤上的点的数目加起来,就得到了肿瘤在图上的面积。任何在肿瘤上的点,如果它是图像的边界或者它的上下左右四个相邻点中至少有一个是非肿瘤上的点,则该点称为肿瘤的边界点。肿瘤的边界点的个数称为肿瘤的周长。现在给定一个图像,要求计算其中的肿瘤的面积和周长。

Input输入第一行包含一个正整数N(0 < N <= 100),表示图像的大小;接下来N行,每行包含图像的一行。图像的一行用N个整数表示(所有整数大于等于0,小于等于255),两个整数之间用一个空格隔开。Output输出只有一行,该行包含两个正整数,分别为给定图像中肿瘤的面积和周长,用一个空格分开。Sample Input

6
99 99 99 99 99 99
99 99 99 50 99 99
99 99 49 49 50 51
99 50 20 25 52 99
40 50 99 99 99 99
99 99 99 99 99 99

Sample Output

9 8
注意红色加粗部分条件这个题目就可以解出来了。
#include <bits/stdc++.h>
using namespace std;
#define M 1005

int a[M][M];


int main(){
	int n,s = 0,c = 0;
	cin>>n;
	for(int i = 0; i < n; i++)
		for(int j = 0; j < n; j++)
		{
			cin>>a[i][j];
			if(a[i][j] <= 50) s++;
		}
	for(int i = 0; i < n; i++)
		for(int j = 0; j < n; j++){
			if(a[i][j] <= 50){
if(a[i-1][j] > 50 || a[i][j-1] > 50 || a[i+1][j] > 50 || a[i][j+1] > 50 || !i || i ==n-1 || !j || j==n-1) c++;		
			}	
		}
	cout<<s<<" "<<c;
	return 0;
}
原文地址:https://www.cnblogs.com/stul/p/9960582.html