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

C++のLonelyPixelI


黒と白のピクセルで構成される画像があるとすると、黒の孤独なピクセルの数を見つける必要があります。ここで、画像は、それぞれ黒と白のピクセルの「B」と「W」で構成される2D文字配列で表されます。

黒の孤独なピクセルは、実際には「B」であり、同じ行と同じ列に他の黒のピクセルがない特定の位置にあります。

入力が-

のような場合
W W B
W B W
B W W

出力は3になります。3つの「B」はすべて黒の孤独なピクセルであるためです。

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

  • n:=画像のサイズ

  • m:=(nがゼロ以外の場合は列サイズ、それ以外の場合は0)

  • サイズnの2つの配列行と列を定義します

  • ret:=0、firstRow:=0

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

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

      • picture [i、j]が'B'と同じ場合、-

        • picture [0、j] <'Y'およびpicture[0、j]が'V'と等しくない場合、-

          • (picture [0、j]を1増やします)

        • iが0と同じ場合、-

          • (firstRowを1増やします)

        • それ以外の場合、picture [i、0] <'Y'およびpicture[i、0]が'V'と等しくない場合、-

          • (picture [i、0]を1増やします)

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

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

      • picture [i、j] <'W'および(picture [0、j]が'C'と同じ、またはpicture [0、j]が'X'と同じ)の場合、-

        • iが0と同じ場合、-

          • ret:=(ret + firstRowが1と同じ場合は1、それ以外の場合は0)

        • それ以外の場合、picture [i、0]が「C」と同じまたはpicture [i、0]が「X」と同じである場合、-

          • (retを1増やします)

  • retを返す

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int findLonelyPixel(vector<vector<char>>& picture) {
      int n = picture.size();
      int m = n ? picture[0].size() : 0;
      vector<int< row(n);
      vector<int< col(m);
      int ret = 0;
      int firstRow = 0;
      for (int i = 0; i < n; i++) {
         for (int j = 0; j < m; j++) {
            if (picture[i][j] == 'B') {
               if (picture[0][j] < 'Y' && picture[0][j] != 'V'){
                  picture[0][j]++;
               }
               if (i == 0)
                  firstRow++;
               else if (picture[i][0] < 'Y' && picture[i][0] != 'V') {
                  picture[i][0]++;
               }
            }
         }
      }
      for (int i = 0; i < n; i++) {
         for (int j = 0; j < m; j++) {
            if (picture[i][j] < 'W' && (picture[0][j] == 'C' || picture[0][j] == 'X')) {
               if (i == 0)
                  ret += firstRow == 1 ? 1 : 0;
               else if (picture[i][0] == 'C' || picture[i][0] == 'X')
                  ret++;
            }
         }
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<vector<char>> v = {{'W','W','B'},{'W','B','W'},{'B','W','W'}};
   cout << (ob.findLonelyPixel(v));
}

入力

{{'W','W','B'},{'W','B','W'},{'B','W','W'}}

出力

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 次の図から出力を確認できます- この問題については、可能な限り、これは一種のシリーズであるため、ソリューションでこのシリーズのパターンを見つけようと