總時間限制: java
1000mscode
內存限制: orm
65536kB內存
描述form
一張CT掃描的灰度圖像能夠用一個N*N(0 < N < 100)的矩陣描述,矩陣上的每一個點對應一個灰度值(整數),其取值範圍是0-255。咱們假設給定的圖像中有且只有一個腫瘤。在圖上監測腫瘤的方法以下:若是某個點對應的灰度值小於等於50,則這個點在腫瘤上,不然不在腫瘤上。咱們把在腫瘤上的點的數目加起來,就獲得了腫瘤在圖上的面積。任何在腫瘤上的點,若是它是圖像的邊界或者它的上下左右四個相鄰點中至少有一個是非腫瘤上的點,則該點稱爲腫瘤的邊界點。腫瘤的邊界點的個數稱爲腫瘤的周長。如今給定一個圖像,要求計算其中的腫瘤的面積和周長。class
輸入import
輸入第一行包含一個正整數N(0 < N < 100),表示圖像的大小;接下來N行,每行包含圖像的一行。圖像的一行用N個整數表示(全部整數大於等於0,小於等於255),兩個整數之間用一個空格隔開。方法
輸出im
輸出只有一行,該行包含兩個正整數,分別爲給定圖像中腫瘤的面積和周長,用一個空格分開。next
樣例輸入
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
來源
http://bailian.openjudge.cn/practice/2677
import java.util.Scanner; public class OpenJudge2677 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); final int n = scanner.nextInt(); int area = 0; int perimeter = 0; int[][] matrix = new int[n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { matrix[i][j] = scanner.nextInt(); } } scanner.close(); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (matrix[i][j] <= 50) { area++; if (i == 0 || i == (n - 1) || j == 0 || j == (n - 1)) { perimeter++; } else if (matrix[i - 1][j] > 50 || matrix[i][j + 1] > 50 || matrix[i + 1][j] > 50 || matrix[i][j - 1] > 50) { perimeter++; } } } } System.out.println(String.format("%d %d", area, perimeter)); } }
個人Java解答始終通不過. 而一樣的邏輯, 用GCC來提交, 卻經過了:
int main() { int i,j,n; int o=0,l=0; int a[100][100]; scanf("%d",&n); for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&a[i][j]); for(i=0;i<n;i++) for(j=0;j<n;j++) { if(a[i][j]<=50) { o++; if( i == 0 || j == 0 || i == n-1 || j == n-1){ l++; }else if(!((a[i-1][j]<=50)&&(a[i+1][j]<=50)&&(a[i][j-1]<=50)&&(a[i][j+1]<=50)) ){ l++; } } } printf("%d %d\n",o,l); return 0; }
或者這樣寫也Accepted.
int main() { int i,j,n; int o=0,l=0; int a[100][100]; scanf("%d",&n); for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&a[i][j]); for(i=0;i<n;i++) for(j=0;j<n;j++) { if(a[i][j]<=50) { o++; if( i == 0 || j == 0 || i == n-1 || j == n-1){ l++; }else if((a[i-1][j]>50)||(a[i+1][j]>50)||(a[i][j-1]>50)||(a[i][j+1]>50) ){ l++; } } } printf("%d %d\n",o,l); return 0; }