zoukankan      html  css  js  c++  java
  • 水题 J

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

    Input输入第一行包含一个正整数N(0 < N <= 100),表示图像的大小;接下来N行,每行包含图像的一行。图像的一行用N个整数表示(所有整数大于等于0,小于等于255),两个整数之间用一个空格隔开。Output输出只有一行,该行包含两个正整数,分别为给定图像中肿瘤的面积和周长,用一个空格分开。Sample Input

    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
    

    Sample Output

    9 8
    注意红色加粗部分条件这个题目就可以解出来了。
    #include <bits/stdc++.h>
    using namespace std;
    #define M 1005
    
    int a[M][M];
    
    
    int main(){
    	int n,s = 0,c = 0;
    	cin>>n;
    	for(int i = 0; i < n; i++)
    		for(int j = 0; j < n; j++)
    		{
    			cin>>a[i][j];
    			if(a[i][j] <= 50) s++;
    		}
    	for(int i = 0; i < n; i++)
    		for(int j = 0; j < n; j++){
    			if(a[i][j] <= 50){
    if(a[i-1][j] > 50 || a[i][j-1] > 50 || a[i+1][j] > 50 || a[i][j+1] > 50 || !i || i ==n-1 || !j || j==n-1) c++;		
    			}	
    		}
    	cout<<s<<" "<<c;
    	return 0;
    }
    
  • 相关阅读:
    OO开发
    重构:Extract Method (提炼函数)
    Vue 一个组件引用另一个组件
    闭包
    视差滚动原理与实现
    JS中的constructor 和 prototype
    jQuery 为动态添加的元素绑定事件
    setTimeout 的理解
    关于Vertical Align的理解
    网页特效:滚动视差设计指南
  • 原文地址:https://www.cnblogs.com/stul/p/9960582.html
Copyright © 2011-2022 走看看