Bailian2677 Bailian3865 肿瘤检测

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

输入
输入第一行包含一个正整数N(0 < N <= 100),表示图像的大小;接下来N行,每行包含图像的一行。图像的一行用N个整数表示(所有整数大于等于0,小于等于255),两个整数之间用一个空格隔开。
输出
输出只有一行,该行包含两个正整数,分别为给定图像中肿瘤的面积和周长,用一个空格分开。
样例输入
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
样例输出
9 8
来源
计算概论05-模拟考试1

问题链接Bailian2677 Bailian3865 肿瘤检测
问题描述:(略)
问题分析
    这个问题虽然是计算面积和周长的问题,但是计算方法还是略有不同。可以根据C语言程序的代码理解计算面积和周长的方法。
    Bailian2677和Bailian3865是同一题。
程序说明:(略)
参考链接:(略)
题记:(略)

AC的C语言程序如下:

/* Bailian2677 Bailian3865 肿瘤检测 */

#include <stdio.h>

#define MAXV 255
#define TV 50 /* 阀值 */
#define N 100

int a[N + 2][N + 2];

int main(void)
{
    int n, i, j;

    scanf("%d", &n);

    /* 清除边界 */
    for(i = 0; i < n + 2; i++)
        a[i][0] = a[0][i] = a[i][n + 1] = a[n + 1][i] = MAXV;

    /* 读入数据 */
    for(i = 1; i <= n; i++)
        for(j = 1; j <= n; j++)
            scanf("%d", &a[i][j]);

    /* 计算面积和周长 */
    int area = 0, peri = 0;
    for(i = 1; i <= n; i++)
        for(j = 1; j <= n; j++)
            if(a[i][j] <= TV) {
                area++;
                if(a[i + 1][j] > TV || a[i - 1][j] > TV || a[i][j + 1] > TV || a[i][j - 1] > TV)
                                    peri++;
            }

    /* 输出结果 */
    printf("%d %d\n", area, peri);

    return 0;
}

猜你喜欢

转载自www.cnblogs.com/tigerisland45/p/9980974.html