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

最大数の敵を見つけるためのプログラムは、C ++に爆弾を置くために殺されますか?


2s、1s、0sの3つの異なる値の2Dマトリックスがあるとします。ここで、2は敵を表し、1は壁を表し、0は空のセルを表します。 1つの爆弾を使って殺すことができる最大の敵を見つけなければなりません。爆弾は、植えられた地点から壁にぶつかるまで、同じ行と列にいるすべての敵を殺します。そして、爆弾は空白のスペースにしか置くことができません。

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

最大数の敵を見つけるためのプログラムは、C ++に爆弾を置くために殺されますか?

爆弾を緑色のボックスに配置して最大3人の敵を殺すことができるため、出力は3になります。

  • ret:=0

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

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

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

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

      • jがゼロまたはgrid[i、j]が1と同じ場合、次のようになります。

        • rowCnt:=0

        • grid [i、j]が1と同じ場合、次のようになります。

          • k:=j + 1

        • それ以外の場合

          • k:=j

        • k

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

      • iがゼロまたはgrid[i、j]が1と同じ場合、次のようになります。

        • colCnt [j]:=0

        • grid [i、j]が1と同じ場合、次のようになります。

          • k:=i + 1

        • それ以外の場合

          • k:=i

        • k

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

      • grid [i、j]が0と同じ場合、次のようになります。

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

          の最大値
  • retを返す

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

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
   int solve(vector<vector<int>>& 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] == 1) {
               rowCnt = 0;
               int k;
               if (grid[i][j] == 1)
                  k = j + 1;
               else
                  k = j;
               for (; k < m && grid[i][k] != 1; k++) {
                  rowCnt += (grid[i][k] == 2);
               }
            }
            if (!i || grid[i][j] == 1) {
               colCnt[j] = 0;
               int k;
               if (grid[i][j] == 1)
                  k = i + 1;
               else
                  k = i;
               for (; k < n && grid[k][j] != 1; k++) {
                  colCnt[j] += (grid[k][j] == 2);
               }
            }
            if (grid[i][j] == 0) {
               ret = max(ret, rowCnt + colCnt[j]);
            }
         }
      }
      return ret;
   }
};

main(){
   Solution ob;
   vector<vector<int>> v = {
      {0,2,0,0},
      {2,0,1,2},
      {0,2,0,0}};
   cout << (ob.solve(v));
}

入力

{{0,2,0,0},
{2,0,1,2},
{0,2,0,0}}

出力

3

  1. 再帰を使用して数値の階乗を見つけるC++プログラム

    非負の整数nの階乗は、n以下のすべての正の整数の積です。 例:4の階乗は24です。 4! = 4 * 3 * 2 *1 4! = 24 整数の階乗は、再帰プログラムまたは反復プログラムを使用して見つけることができます。 次のプログラムは、数値の階乗を見つけるための再帰プログラムを示しています- 例 #include <iostream> using namespace std; int fact(int n) {    if ((n==0)||(n==1))    return 1;    else   &

  2. Pythonの任意の場所に5を追加して最大数を見つけるプログラム

    数nがあるとすると、その数のどこかに5を挿入して、取得できる最大数を見つける必要があります。 したがって、入力がn =834の場合、出力は8534になります。 これを解決するには、次の手順に従います- 0の場合、 s:=n as string k:=空白の文字列 c:=False sの各文字iについて、実行します i <5でcがFalseの場合、 k:=k連結5連結i c:=True それ以外の場合 k:=k連結i kを整数として返す それ以外の場合 k:=空白の文字列 s:=| n