天天看點

CCF資源回收筒選址問題

小白第一次發文章,這個問題我看很多部落客都是用c++來寫的,我提供一種c語言用結構體的思路,過程比較繁瑣但是代碼簡單易懂

CCF資源回收筒選址問題
CCF資源回收筒選址問題
#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;
}
           

繼續閱讀