题目要求对二维图像中的每一个像素进行检测,统计满足条件的点数。
总时间限制: 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。