CSP练习试题201912-2 回收站选址 C++

题目:

解:

#include <iostream>
using namespace std;

class Point {
public:
	Point(int x = 0, int y = 0) :x(x), y(y) {};
	bool judge(Point& p2);//判断是否是符合条件的点
	bool findPoint(Point& p2);//判断是否含有四角的点
	int getX() { return x; }
	int getY() { return y; }
	void setX(int x) { this->x = x; }
	void setY(int y) { this->y = y; }
	static void finishPrint();//最终打印
	void setPoint(int num);//根据得分增加相应得分的个数
private:
	int x, y;
	int pointN = 0;
	static int point0, point1, point2, point3, point4;
};

int Point::point0 = 0;
int Point::point1 = 0;
int Point::point2 = 0;
int Point::point3 = 0;
int Point::point4 = 0;

bool Point::judge(Point& p2) {
	if (x == p2.getX() && (y == p2.getY() + 1 || y == p2.getY() - 1)) {
		return true;
	}
	else if (y == p2.getY() && (x == p2.getX() + 1 || x == p2.getX() - 1)) {
		return true;
	}
	else
		return false;
}

bool Point::findPoint(Point& p2) {
	if ((p2.getX() == x + 1 || p2.getX() == x - 1) && (p2.getY() == y + 1 || p2.getY() == y - 1))
		return true;
	else
		return false;
}

void Point::setPoint(int num) {
	switch (num) {
	case 0:
		point0++;
		break;
	case 1:
		point1++;
		break;
	case 2:
		point2++;
		break;
	case 3:
		point3++;
		break;
	case 4:
		point4++;
		break;
	default:
		break;
	}
}

void Point::finishPrint() {
	cout << point0 << endl << point1 << endl << point2 << endl << point3 << endl << point4 << endl;
}

int main() {
	int num;
	cin >> num;
	Point* points = new Point[num];
	int x, y, flag;
	for (int i = 0; i < num; i++) {
		cin >> x >> y;
		points[i].setX(x);
		points[i].setY(y);
	}
	for (int i = 0; i < num; i++) {
		flag = 0;
		for (int j = 0; j < num; j++) {
			if (points[i].judge(points[j])) {
				flag++;
			}
		}
		if (flag == 4) {
			int pCount = 0;
			for (int k = 0; k < num; k++) {
				if (points[i].findPoint(points[k])) {
					pCount++;
				}
			}
			points[i].setPoint(pCount);
		}
	}
	Point::finishPrint();
    delete(&points);
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值