C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++での爆弾の敵


2Dグリッドがあるとします。ここでは、各セルは壁「W」、敵「E」、または空の「0」のいずれかです。1つの爆弾を使用して殺すことができる最大の敵を見つける必要があります。爆弾は、植えられた地点から壁にぶつかるまで、同じ行と列にいるすべての敵を殺します。そして、爆弾は空白のスペースにしか置くことができません。

したがって、入力が次のような場合

C++での爆弾の敵

緑の場所に爆弾を置くと、出力は3になり、3人の敵を殺します。

これを解決するには、次の手順に従います-

  • ret:=0

  • n:=グリッドの行数、m:=グリッドの列数

  • サイズmの配列列を定義します

  • 初期化i:=0の場合、i

    • 初期化j:=0の場合、j

      • jがゼロまたはgrid[i、j]が'W'と同じである場合、-

        • rowCnt:=0

        • grid [i、j]が'W'と同じ場合、-

          • k:=j + 1

        • それ以外の場合

          • k:=j

        • k

          • rowCnt:=rowCnt + 1(grid [i、k]が'E')の場合、それ以外の場合は0

      • iがゼロまたはgrid[i、j]が'W'と同じである場合、-

        • colCnt [j]:=0

        • grid [i、j]が'W'と同じ場合、-

          • k:=i + 1

        • それ以外の場合

          • k:=i

        • k

          • colCnt [j]:=colCnt [j] + 1(grid [k、j]が'E'の場合)それ以外の場合は0

      • grid [i、j]が '0'と同じ場合、-

        • ret:=retとrowCnt+ colCnt [j]

          の最大値
  • retを返す

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int maxKilledEnemies(vector<vector<char>>& grid) {
      int ret = 0;
      int n = grid.size();
      int m = n ? grid[0].size() : 0;
      int rowCnt = 0;
      vector<int< colCnt(m);
      for (int i = 0; i < n; i++) {
         for (int j = 0; j < m; j++) {
            if (!j || grid[i][j] == 'W') {
               rowCnt = 0;
               int k;
               if (grid[i][j] == 'W')
                  k = j + 1;
               else
                  k = j;
               for (; k < m && grid[i][k] != 'W'; k++) {
                  rowCnt += (grid[i][k] == 'E');
               }
            }
            if (!i || grid[i][j] == 'W') {
               colCnt[j] = 0;
               int k;
               if (grid[i][j] == 'W')
                  k = i + 1;
               else
                  k = i;
               for (; k < n && grid[k][j] != 'W'; k++) {
                  colCnt[j] += (grid[k][j] == 'E');
               }
            }
            if (grid[i][j] == '0') {
               ret = max(ret, rowCnt + colCnt[j]);
            }
         }
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<vector<char>> v = {{'0','E','0','0'},{'E','0','W','E'},{'0','E','0','0'}};
   cout << (ob.maxKilledEnemies(v));
}

入力

{{'0','E','0','0'},{'E','0','W','E'},{'0','E','0','0'}}

出力

3

  1. C++での質素な数

    この問題では、正の整数Nが与えられます。私たちのタスクは、与えられた数が質素な数であるかどうかをチェックするプログラムを作成することです。 不正な番号 −指定された数の素因数分解の桁数よりも厳密に桁数が多い数。 例 − 625、数625の素因数は5 4です。 。 625の桁数は3です。 5 4の桁数 は2です。 3は厳密に2より大きくなります。したがって、625は質素な数です。 最初のいくつかの質素な数は − 125、128、243、256、343、512、625など。 問題を理解するために例を見てみましょう Input: n = 128 Output: Frugal n

  2. C++五胞体数

    五胞体数は、パスカルの三角形の5番目の数として表されます。ご存知のように、これは5番目の数字です。つまり、パスカルの三角形に少なくとも5つの数字が必要です。したがって、このシリーズの最初の数字は 1 4 6 4 1から始まります。 パスカルの三角形の4行目。したがって、このチュートリアルでは、たとえば、n番目の五胞体数を見つける必要があります Input : 1 Output : 1 Input : 4 Output : 35 次の図から出力を確認できます- この問題については、可能な限り、これは一種のシリーズであるため、ソリューションでこのシリーズのパターンを見つけようと