1. 程式人生 > >Bailian2713 腫瘤面積

Bailian2713 腫瘤面積

2713:腫瘤面積
描述
在一個正方形的灰度圖片上,腫瘤是一塊矩形的區域,腫瘤的邊緣所在的畫素點在圖片中用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
提示
如果使用靜態陣列來表示圖片資料,需要將該陣列定義成全域性變數。
來源
2005~2006醫學部計算概論期末考試

問題連結Bailian2713 腫瘤面積
問題描述:(略)
問題分析
    這個問題的關鍵是找到左上角和右下角的座標。有了座標的值算一下面積就可以了。所以,沒有必要使用二維陣列!
程式說明:(略)
參考連結:(略)
題記:(略)

AC的C語言程式如下:

/* Bailian2713 腫瘤面積 */

#include <stdio.h>

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

    scanf("%d", &n);

    int xstart = n + 1, xend = 0, ystart = n + 1, yend = 0;
    for(i = 1; i <= n; i++)
        for(j = 1; j <= n; j++) {
            scanf("%d", &a);

            if(a == 0) {
                if(i < xstart || j < ystart) {
                    xstart = i;
                    ystart = j;
                }
                if(i > xend || j > yend) {
                    xend = i;
                    yend = j;
                }
            }
        }

    printf("%d\n", (xend - xstart - 1) * (yend - ystart - 1));

    return 0;
}