Skip to content

Latest commit

 

History

History
77 lines (64 loc) · 2.28 KB

2937.md

File metadata and controls

77 lines (64 loc) · 2.28 KB

二维数组 2937: 异常细胞检测

题目要求对二维图像中的每一个像素进行检测,统计满足条件的点数。

题目来源

2937: 异常细胞检测

总时间限制: 1000ms 内存限制: 65536kB

描述

我们拍摄的一张CT照片用一个二维数组来存储,假设数组中的每个点代表一个细胞。 每个细胞的颜色用0到255之间(包括0和255)的一个整数表示。 我们定义一个细胞是异常细胞,如果这个细胞的颜色值比它上下左右4个细胞的颜色值都小50以上(包括50)。 数组边缘上的细胞我们不检测。现在我们的任务是,给定一个存储CT照片的二维数组,写程序统计照片中异常细胞的数目。

输入

第一行包含一个整数N(100>=N>2). 下面有 N 行,每行有 N 个0~255之间的整数,整数之间用空格隔开。

输出

输出只有一行,包含一个整数,为异常细胞的数目。

样例输入

4
70 70 70 70
70 10 70 70
70 70 20 70
70 70 70 70 

样例输出

2

这是一个二维数组遍历的问题,通过两重循环遍历判断计数即可。

#include <iostream>
using namespace std;
int main() {
	int n, i, j, sum = 0;
	cin >> n;
	int **data = new int*[n];
	for (i = 0; i < n; ++i) {
		data[i] = new int[n];
		for (j = 0; j < n; ++j) {
			cin >> data[i][j];
		}
	}
	for (i = 1; i < n - 1; ++i) {
		for (j = 1; j < n - 1; ++j) {
			if (data[i][j] + 50 <= data[i - 1][j]
				&& data[i][j] + 50 <= data[i + 1][j]
				&& data[i][j] + 50 <= data[i][j - 1]
				&& data[i][j] + 50 <= data[i][j + 1]) {
				j++;
				sum++;
			}
		}
	}
	cout << sum << endl;
	for (i = 0; i < n; ++i) {
		delete[] data[i];
	}
	delete[] data;
	return 0;
}

2937.cpp 代码长度:586B 内存:320kB 时间:20ms 通过率:98% 最小内存:252kB 最短时间:0ms

二维数组的动态内存分配首先通过new int*来实现分配指针数组,在此基础上按照一维数组的动态内存分配方式分配内存。 之后除边缘点外,遍历二维数组,判断其上下左右四邻居的值从而计数输出即可。最后要释放内存。

有任何的改进意见欢迎大家在微信平台公众号主页面留言或者发表issue。