总时间限制: 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; }