小白第一次发文章,这个问题我看很多博主都是用c++来写的,我提供一种c语言用结构体的思路,过程比较繁琐但是代码简单易懂
#include<iostream>
using namespace std;
struct pos {
long long x;
long long y;
int cnt;//满足四个方位都有垃圾的个数
int cnt1;//满足上述条件之后的对角线有垃圾的个数
}a[1001];
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i].x >> a[i].y;
a[i].cnt1 = 99;//先初始化为99,防止后续cnt00判断错误
a[i].cnt = 0;
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n ; j++) {//判断四个方位是否有垃圾
if (a[i].x + 1 == a[j].x && a[i].y == a[j].y) {
a[i].cnt++;
}
if (a[i].x == a[j].x && a[i].y + 1 == a[j].y) {
a[i].cnt++;
}
if (a[i].x == a[j].x && a[i].y - 1 == a[j].y) {
a[i].cnt++;
}
if (a[i].x-1 == a[j].x && a[i].y == a[j].y) {
a[i].cnt++;
}
}
}
for (int i = 0; i < n; i++) {
if (a[i].cnt == 4) {
a[i].cnt1 = 0;//当满足第一个条件之后再初始化cnt1
for (int j = 0; j < n; j++) {//判断是否满足对角线的垃圾
if (a[i].x + 1 == a[j].x && a[i].y + 1 == a[j].y) {
a[i].cnt1++;
}
if (a[i].x - 1 == a[j].x && a[i].y - 1 == a[j].y) {
a[i].cnt1++;
}
if (a[i].x + 1 == a[j].x && a[i].y - 1 == a[j].y) {
a[i].cnt1++;
}
if (a[i].x - 1 == a[j].x && a[i].y + 1 == a[j].y) {
a[i].cnt1++;
}
}
}
}
int cnt00 = 0;
int cnt11 = 0;
int cnt22 = 0;
int cnt33 = 0;
int cnt44 = 0;
int cnt55 = 0;
for (int i = 0; i < n; i++) {
if (a[i].cnt1 == 0) {
cnt00++;
}
else if (a[i].cnt1 == 1) {
cnt11++;
}
else if (a[i].cnt1 == 2) {
cnt22++;
}
else if (a[i].cnt1 == 3) {
cnt33++;
}
else if (a[i].cnt1 == 4) {
cnt44 ++ ;
}
}
cout << cnt00 << endl << cnt11 << endl << cnt22 << endl << cnt33 << endl << cnt44 << endl;
return 0;
}