1.8-03:计算矩阵边缘元素之和

总时间限制: 

1000ms

内存限制: 

65536kB

描述

输入一个整数矩阵,计算位于矩阵边缘的元素之和。所谓矩阵边缘的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。

输入

第一行分别为矩阵的行数m和列数n(m < 100,n < 100),两者之间以一个空格分开。
接下来输入的m行数据中,每行包含n个整数,整数之间以一个空格分开。

输出

输出对应矩阵的边缘元素和

样例输入

3 3
3 4 1
3 7 1
2 0 1

样例输出

15

来源

6375

代码

#include<bits/stdc++.h>
using namespace std;
int m,n,a[110][110],sum;
int main()
{
	cin>>m>>n;
	for(int i=1;i<=m;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cin>>a[i][j];
			if(i==1||i==m||j==1||j==n) sum+=a[i][j];
		}
	}
	cout<<sum;
}

### 实现思路 为了计算肿瘤面积,在给定的条件下,可以采用遍历整个二维数组的方式。对于每一个值为`0`的位置,判断它是否属于肿瘤边界;如果是,则跳过此位置继续寻找内部点。通过这种方式能够区分出哪些是肿瘤内的有效计数点。 具体来说: - 初始化两个变量用于记录肿瘤总面积和周长。 - 遍历整个矩阵中的每个元素- 如果遇到灰度值小于等于50的情况(即认为是在肿瘤上),则增加总像素数量来统计面积。 - 对于这些被标记为肿瘤的部分,进一步检查它们是不是位于图像边缘或者是周围存在非肿瘤区域——这决定了该点是否应计入周长。 下面给出具体的C语言代码实现方案[^2]。 ```c #include <stdio.h> #define MAX_SIZE 100 // 定义最大可能尺寸 int main() { int n; scanf("%d", &n); int img[MAX_SIZE][MAX_SIZE]; for (int i = 0; i < n; ++i){ for(int j = 0 ;j<n;j++){ scanf("%d",&img[i][j]); } } int area = 0, perimeter = 0; for (int row = 0; row < n; ++row) { for (int col = 0; col < n; ++col) { if (img[row][col] <= 50) { // 判断当前节点是否为肿瘤部分 // 统计面积 area++; // 检查是否处于边界或四周是否有非肿瘤细胞 if ((row == 0 || row == n - 1 || col == 0 || col == n - 1 || img[row - 1][col] > 50 || img[row + 1 >= n ? n - 1 : row + 1][col] > 50 || img[row][col - 1] > 50 || img[row][col + 1 >= n ? n - 1 : col + 1] > 50)) { perimeter++; } } } } printf("Tumor Area: %d\nPerimeter: %d\n", area, perimeter); return 0; } ``` 这段代码实现了对输入数据读取并处理的功能,最终输出了肿瘤的实际覆盖面积以及其外围轮廓长度。注意这里假定了输入的数据格式严格遵循题目描述,并且已经考虑到了越界访问的可能性[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值