肿瘤面积C++代码(附详细注释)

题目描述

在一个正方形的灰度图片上 , 肿瘤是一块矩形的区域

肿瘤的边缘所在的像素点在图片中用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

思路:

代码里面有详细注释的,这里先不写了,具体见代码↓ 

AC代码(超详细注释):

//2024/7/22 15:27刷到这题
#include <bits/stdc++.h>//配上万能头文件
using namespace std;//cin,cout必备
int mat[1005][1005];//定义一个二维数组(mat是地图的意思)
/*

    测试用例:
    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

*/
int main()//main主函数
{
	int n;//正方形图像的边长
    cin >> n;//输入数据
    int a=-1,b=-1,c=-1,d=-1;//a和c是肿瘤左上角的坐标,b和d是肿瘤右下角的坐标
    for(int i=0;i<n;i++)//第一层循环,n行
    {
        for(int j=0;j<n;j++)//第二层循环,n列
        {
            cin >> mat[i][j];//读入数据
        }
    }
    //判断肿瘤左上角的坐标
    for(int i=0;i<n;i++)//第一层循环,n行
    {
        for(int j=0;j<n;j++)//第二层循环,n列
        {
            if(!mat[i][j])//如果是0,也可以写成if(a[i][j]==0)
            {
                a=i,c=j;//确定左上角的位置
                break;//第一个就是左上角的位置,break跳出第二层循环
            }
        }
        if(a!=-1)//如果已经找到了左上角的位置
        {
            break;//跳出第一层循环
        }
    }
    //判断肿瘤右下角的坐标
    for(int i=0;i<n;i++)//第一层循环,n行
    {
        for(int j=0;j<n;j++)//第二层循环,n列
        {
            if(!mat[i][j])//如果是0,也可以写成if(a[i][j]==0)
            {
                b=i,d=j;//确定右下角的位置
                //这里不用break,因为最后一个才是右下角的位置
            }
        }
    }
    //cout<<a<<" "<<b<<" "<<c<<" "<<d;一开始写错了,调试用的
    int x=b-a-1,y=d-c-1;//计算行数和列数,-1是因为只要计算里面的,外面一圈不用算
    cout<<x*y;//输出像素点的个数
	return 0;//程序结束
}
//创作不易,各位点个赞吧!

 各位应该看懂了吧?如果不懂,再说一次思路:

首先读入数据,然后判断一下肿瘤左上角和右下角的坐标,最后输出即可

最后,再提两句:

这是我点击量最高的博文:【NOIP】瑞士轮 这是我收藏量最高的博文:分享3道水题的AC代码

这是我点赞量最高的博文 :[CSP-J 2022] 乘方 题解 通过这篇博文素数环(回溯+搜索)

 我一次性收获了最多的粉丝(目前共34个)

我本来以为我这个接触C++才几个月(2023/11/02开始学)的小学生(快初中了)写的题解,特别是在这里写的题解不会有人喜欢的,但没想到,我才写了20篇,就有很多人(目前124人,还有很多几万粉丝的那种超级大佬,我是真没想到)关注了我,也有很多点赞和收藏。本来我对写题解没什么兴趣,就想试一试,但你们的支持,给了我动力!之后,我会继续努力,让大家更满意!

这篇博客就到这里啦,我们下篇见!(点个赞呗~ 

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值