n * n グリッドがあると仮定します。以下に示すように、グリッドに十字のパターンがあるかどうかを検出する必要があります。-
#...# .#.#. ..#.. .#.#. #...#
グリッドには「#」と「.」のみを含めることができます。パターンを検出し、そのパターンがいくつあるかを調べる必要があります。 グリッドのパターン。グリッドと寸法が入力として与えられます。
プログラミングにおけるさまざまな問題は、さまざまな手法で解決できます。問題を解決するには、まずアルゴリズムを設計し、特定の問題を詳細に研究する必要があります。同じ問題が繰り返し発生する場合は、再帰的手法を使用することも、反復構造を使用することもできます。 if-else や switch case などの制御ステートメントを使用して、プログラムの論理フローを制御できます。変数とデータ構造を効果的に使用すると、よりシンプルなソリューションと、軽量でメモリ要件の低いプログラムが提供されます。私たちは、分割統治、貪欲プログラミング、動的プログラミングなどの既存のプログラミング手法を研究し、それらが使用できるかどうかを確認する必要があります。この問題は、いくつかの基本的なロジックまたは強引な方法で解決できます。この方法をよりよく理解するには、以下に従ってください。
したがって、問題の入力が n = 5 でグリッドが
#...# .#.#. ..#.. .#.#. #...#,
の場合、出力は 1 になります。
この問題を解決するには、次の手順に従います。
count := 0 for initialize i := 1, when i < n - 1, update (increase i by 1), do: for initialize j := 1, when j < n - 1, update (increase j by 1), do: if grid[i, j] is same as '#' and grid[i - 1, j - 1] is same as '#' and grid[i - 1, j + 1] is same as '#' and grid[i + 1, j - 1] is same as '#' and grid[i + 1, j + 1] is same as '#', then: (increase count by 1) print(count)
理解を深めるために、以下の実装を見てみましょう -
#include<bits/stdc++.h> using namespace std; void solve(int n, vector<string> grid) { int count = 0; for(int i = 1; i < n - 1; i++){ for(int j = 1; j < n - 1; j++){ if(grid[i][j] == '#' && grid[i - 1][j - 1] == '#' && grid[i - 1][j + 1] == '#' && grid[i + 1][j - 1] == '#' && grid[i + 1][j + 1] == '#') count++; } } cout<< count; } int main() { int n = 5; vector<string> grid = {"#...#", ".#.#.", "..#..", ".#.#.", "#...#"}; solve(n, grid); return 0; }
5, {"#...#", ".#.#.", "..#..", ".#.#.", "#...#"}
1
以上がグリッドにパターンが存在するかどうかを調べる C++ プログラムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。