ccf练习题——回收站选址(java实现)

ccf练习题——回收站选址

在这里插入图片描述在这里插入图片描述 根据题目,对回收站选址有两个选择要求:

  1. (x, y)必须是整数。
  2. 上下左右,四个邻居位置必须全部存在垃圾,即(x +1, y)、(x - 1, y)、(x, y + 1)、(x, y - 1)坐标上有垃圾。

有垃圾的点<==>输入的坐标
查找的代码:

public static boolean chazhao(int num, int x1, int y1, int x[], int y[]) {
		boolean pd1 = false, pd2 = false, pd3 = false, pd4 = false;
		for(int i = 0; i < num; i++) {											// 每次对一对坐标进行查找
			if((x1 + 1) == x[i]) {												// 题目条件:坐标的上下左右都有标记(垃圾点), 且坐标为整数
				if(y[i] == y1) pd1 = true;
			}
			if((x1 - 1) == x[i]) {
				if(y[i] == y1) pd2 = true;
			}
			if((y1 + 1) == y[i]) {
				if(x[i] == x1) pd3 = true;
			}
			if((y1 - 1) == y[i]) {
				if(x[i] == x1) pd4 = true;
			}
		}
		if((pd1 && pd2 && pd3 && pd4) == true) return true;			// x1,y1 对每一对坐标 比对后, 满足条件 返回true
		else return false;											// 否则返回 false
	}

对输入的坐标按照上述的要求进行筛选,查找出符合要求的点进行评估分数。
评分的代码:

public static int pingfen(int num, int x1, int y1, int x[], int y[]) {
		int point = 0;								// 记录评分
		for(int i = 0; i < num; i++) {				// 按照题目要求评分
			if((x1 + 1) == x[i]) {					// 合格点的斜对角有标记点(垃圾点)
				if((y1 + 1) == y[i]) point++; 		// 以判断x进入 和 以判断y 进入是一样的,不用重复写
				if((y1 - 1) == y[i]) point++;
			}
			if((x1 - 1) == x[i]) {
				if((y1 + 1) == y[i]) point++;
				if((y1 - 1) == y[i]) point++;
			}
		}
		return point;
	}

上面的代码都是对一个坐标进行筛选的操作,把他们在写进一个循环中。
筛选的代码:

public static int[] shaixuan(int num, int x[], int y[]) {
		int point;
		int data [] = new int [5];							// 存放评分结果
		for(int i = 0; i < num; i++) {
			if(chazhao(num, x[i], y[i], x, y)) {					// 对于满足条件的坐标,进行评分
				point = pingfen(num, x[i], y[i], x, y);
				switch(point) {
				case 0:{
					data[0] += 1;
					break;
				}
				case 1:{
					data[1] += 1;
					break;
				}
				case 2:{
					data[2] += 1;
					break;
				}
				case 3:{
					data[3] += 1;
					break;
				}
				case 4:{
					data[4] += 1;
					break;
				}
				}
			}
		}
		return data;
	}

完整代码:

class Huishou{
	public static boolean chazhao(int num, int x1, int y1, int x[], int y[]) {
		boolean pd1 = false, pd2 = false, pd3 = false, pd4 = false;
		for(int i = 0; i < num; i++) {											// 每次对一对坐标进行查找
			if((x1 + 1) == x[i]) {												// 题目条件:坐标的上下左右都有标记(垃圾点), 且坐标为整数
				if(y[i] == y1) pd1 = true;
			}
			if((x1 - 1) == x[i]) {
				if(y[i] == y1) pd2 = true;
			}
			if((y1 + 1) == y[i]) {
				if(x[i] == x1) pd3 = true;
			}
			if((y1 - 1) == y[i]) {
				if(x[i] == x1) pd4 = true;
			}
		}
		if((pd1 && pd2 && pd3 && pd4) == true) return true;			// x1,y1 对每一对坐标 比对后, 满足条件 返回true
		else return false;											// 否则返回 false
	}
	public static int pingfen(int num, int x1, int y1, int x[], int y[]) {
		int point = 0;								// 记录评分
		for(int i = 0; i < num; i++) {				// 按照题目要求评分
			if((x1 + 1) == x[i]) {					// 合格点的斜对角有标记点(垃圾点)
				if((y1 + 1) == y[i]) point++; 		// 以判断x进入 和 以判断y 进入是一样的,不用重复写
				if((y1 - 1) == y[i]) point++;
			}
			if((x1 - 1) == x[i]) {
				if((y1 + 1) == y[i]) point++;
				if((y1 - 1) == y[i]) point++;
			}
		}
		return point;
	}
	public static int[] shaixuan(int num, int x[], int y[]) {
		int point;
		int data [] = new int [5];							// 存放评分结果
		for(int i = 0; i < num; i++) {
			if(chazhao(num, x[i], y[i], x, y)) {					// 对于满足条件的坐标,进行评分
				point = pingfen(num, x[i], y[i], x, y);
				switch(point) {
				case 0:{
					data[0] += 1;
					break;
				}
				case 1:{
					data[1] += 1;
					break;
				}
				case 2:{
					data[2] += 1;
					break;
				}
				case 3:{
					data[3] += 1;
					break;
				}
				case 4:{
					data[4] += 1;
					break;
				}
				}
			}
		}
		return data;
	}
	public static void printArea(int x[]) {
		for(int i = 0 ; i < x.length; i++) {
			System.out.println(x[i]);
		}
	}
	public static void main(String args[]) {
		int x[] = new int[10000];					// 数组x 存储待处理垃圾的xi 坐标
		int y[] = new int[10000];					// 数组y 存储待处理垃圾的yi 坐标
		int point[] = new int[5]; 				// 存放评分结果,用于输出
		Scanner input = new Scanner(System.in);
		int num = input.nextInt();
		for(int i = 0; i < num; i++) {			// 输入标记点(垃圾点)的坐标
			x[i] = input.nextInt();				// x,y 分开存储
			y[i] = input.nextInt();
		}
		point = shaixuan(num, x, y);
		printArea(point);
	}
}

注意:main中的x,y数组大小要足够大,不然提交时会出现 运行错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值