題目連結: https://zerojudge.tw/ShowProblem?problemid=d596

# 內容

在一個九宮格裡(即如下的井字形),某一個格子下被放置一顆地雷。為了
找出這個地雷的所在,九宮格的主人會透露出以下的訊息:

  1. 一個與地雷格相鄰的格子
  2. 兩個與地雷格不相鄰的格子
    此處所指的相鄰為橫向或縱向,不包括對角。比如,5 號格的相鄰格號碼為
    2, 4, 6, 8;4 號的相鄰格號碼則為 1, 5, 7;以此類推。


請寫一支程式來列出所有可能被放置地雷的格子號碼。

# 解題思路

從可能的格子 (near) 尋找四周 (超界就忽略),可能的四周 (y1,x1) 的四周有任何一格 (y2,x2) 有撞到不相鄰的格子,則 (y1,x1) 就不會是正解。

# 程式碼

#include <bits/stdc++.h>
#define ll long long
#define speed ios::sync_with_stdio(false);cin.tie(0)
using namespace std;

int main() {
	int t, near, no1, no2, x1, y1, x2, y2, dx[4] = { 0, -1, 1, 0 }, dy[4] = { -1, 0, 0, 1 };
	string matrix[3] = { "123", "456", "789" };
	bool have, can;
	cin >> t;
    speed;
	while (t--) {
		cin >>near>> no1 >>no2, have = false;

		for (int i = 0; i < 4; i++) {
			x1 = (near - 1) % 3 + dx[i];
			y1 = (near - 1) / 3 + dy[i];
			if (x1 < 0 || x1 >= 3 || y1 < 0 || y1 >= 3)
				continue;
			can = true;
			for (int j = 0; j < 4; j++) {
				x2 = x1 + dx[j], y2 = y1 + dy[j];
				if (x2 < 0 || x2 >= 3 || y2 < 0 || y2 >= 3)
					continue;
				if (matrix[y2][x2] - '0' == no1 || matrix[y2][x2] - '0' == no2) {
					can = false;
					break;
				}
			}
			if (can)
				cout << matrix[y1][x1] << ' ', have = true;
		}

		if (!have)
			cout << "Empty";

		cout << '\n';
	}
}
更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay