1. 程式人生 > 實用技巧 >java題(去二位陣列邊界) -- 腫瘤檢測

java題(去二位陣列邊界) -- 腫瘤檢測

腫瘤檢測

題目描述

描述 一張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




我們假設給定的影象中有且只有一個腫瘤。在圖上監測腫瘤的方法如下:

如果某個點對應的灰度值小於等於50,則這個點在腫瘤上,否則不在腫瘤上。

、、我們把在腫瘤上的點的數目加起來,就得到了腫瘤在圖上的面積。任何在腫瘤上的點

如果它是影象的邊界或者它的上下左右四個相鄰點中至少有一個是非腫瘤上的點,

則該點稱為腫瘤的邊界點。腫瘤的邊界點的個數稱為腫瘤的周長。

現在給定一個影象,

要求計算其中的腫瘤的面積和周長。

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

00

01

02

03

04

05

10

11

12

13

14

15

20

21

22

23

24

25

30

31

32

33

34

35

40

41

42

43

44

45

50

51

52

53

54

55

60

61

62

63

64

65

70

71

72

73

74

75

  認真看其實.....就是去邊界運算啊....

    上程式碼:

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(),zl_S = 0,zl_C = 0;
        if(n > 0 && n < 100) {
            int arr[][] = new int [n][n];
            for(int i = 0;i < n;i++) {
                for(int j = 0;j < arr[i].length;j++) {
                    arr[i][j] = sc.nextInt();
                    if(arr[i][j]  <= 50) {
                        zl_S++;
                    }
                }
            }
            
            for(int i = 0;i < n;i++) {
                for(int j = 0;j < arr[i].length;j++) {
                    if(i==0 || i == n-1 || j == 0 || j == n-1) {
                        if(arr[i][j] <= 50) {
                            zl_C++;
                        }
                    }else {
                        if(arr[i][j] <= 50) {
                            if((arr[i+1][j] > 50) || (arr[i-1][j]) > 50 || (arr[i][j+1]) > 50 || (arr[i][j-1]) > 50) {
                                zl_C++;
                            }
                        }
                    }
                }
            }
            
            System.out.print(zl_S+ " "+ zl_C);
            
    }
    }
}