题目
思路
由题可知道的是,肿瘤边界一定是0,而且一定是一个矩形。那么就可以通过正序与逆序找到左上角0的坐标以及右下角0的坐标。然后再遍历或者直接算内层矩形的面积即可。
AC代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
int arr[n + 1][n + 1];
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
cin >> arr[i][j];
}
}
int res = 0, index1 = 0, index2 = 0, index3 = 0, index4 = 0;
for (int i = 1; i <= n; ++i) {
bool flag = false;
for (int j = 1; j <= n; ++j) {
if (arr[i][j] == 0) {
index1 = i;
index2 = j;
flag = true;
break;
}
}
if (flag)
break;
}
for (int i = n; i >= 1; --i) {
bool flag = false;
for (int j = n; j >= 1; --j) {
if (arr[i][j] == 0) {
index3 = i;
index4 = j;
flag = true;
break;
}
}
if (flag)
break;
}
for (int i = index1; i <= index3; ++i) {
for (int j = index2; j <= index4; ++j) {
if (arr[i][j] == 255)
res++;
}
}
cout << res;
//cout<<(index3-index1-1)*(index4-index2-1);
}
后记
数组是从1开始的啊,逆序找的时候找到位置1就可以了!!!
这种题真的适合信科院新手练习吗