Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में Lonely Pixel I


मान लीजिए हमारे पास काले और सफेद पिक्सेल से बनी एक तस्वीर है, हमें काले अकेले पिक्सेल की संख्या ढूंढनी है। यहाँ तस्वीर को 'B' और 'W' से बने 2D कैरेक्टर सरणी द्वारा दर्शाया गया है, काले और सफेद पिक्सेल के लिए क्रमशः।

एक काला अकेला पिक्सेल वास्तव में 'B' है जो एक विशिष्ट स्थिति पर स्थित है जहां उसी पंक्ति और उसी स्तंभ में कोई अन्य काला पिक्सेल नहीं है।

यदि इनपुट इस तरह है:

WWB
WBW
BWW

आउटपुट 3 होगा। क्योंकि सभी तीन 'B' काले अकेले पिक्सेल हैं।

समाधान दृष्टिकोण

इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:

  • n := picture का आकार
  • m := (यदि n शून्येतर है, तो स्तंभ का आकार, अन्यथा 0)
  • आकार n के दो सरणी row और col परिभाषित करें
  • ret := 0, firstRow := 0
  • i := 0 से आरंभ करें, जब i < n, अपडेट करें (i को 1 से बढ़ाएँ), करें:
    • j := 0 से आरंभ करें, जब j < m, अपडेट करें (j को 1 से बढ़ाएँ), करें:
      • यदि 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 < n, अपडेट करें (i को 1 से बढ़ाएँ), करें:
    • j := 0 से आरंभ करें, जब j < m, अपडेट करें (j को 1 से बढ़ाएँ), करें:
      • यदि 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;
    }
};

int main() {
    Solution ob;
    vector<vector<char>> v = {{'W','W','B'},{'W','B','W'},{'B','W','W'}};
    cout << (ob.findLonelyPixel(v));
    return 0;
}

इनपुट

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

आउटपुट

3
  1. - C++ में Switch स्टेटमेंट: एक पूर्ण गाइड

    C++ में Switch स्टेटमेंट का उपयोग कैसे करें कंडीशनल स्टेटमेंट्स सभी प्रोग्रामिंग भाषाओं की एक सामान्य विशेषता हैं। इन स्टेटमेंट्स का उपयोग प्रोग्राम के प्रवाह को नियंत्रित करने और यह निर्दिष्ट करने के लिए किया जाता है कि कोड के विशिष्ट ब्लॉक्स कब निष्पादित होने चाहिए। C++ में उपयोग किए जाने वाले मुख

  1. - C++ में मितव्ययी संख्या (Frugal Number)

    इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया गया है। हमारा कार्य यह जांचने के लिए एक प्रोग्राम बनाना है कि दी गई संख्या मितव्ययी संख्या है या नहीं। मितव्ययी संख्या (FRUGAL NUMBER) − एक संख्या जिसके अंकों की संख्या उस संख्या के अभाज्य गुणनखंडन में अंकों की संख्या से सख्ती से अधिक है। उदाहरण &

  1. C++ में पेंटाटोप संख्या C++ में पेंटाटोप संख्या

    एक पेंटाटोप संख्या को पास्कल के त्रिभुज में पांचवीं संख्या के रूप में वर्णित किया गया है। अब, चूंकि यह पांचवीं संख्या है, इसका मतलब है कि पास्कल के त्रिभुज में कम से कम पांच संख्याएं होनी चाहिए, इसलिए इस श्रृंखला की पहली संख्या 1 4 6 4 1 से शुरू होती है जो पास्कल के त्रिभुज की चौथी पंक्ति है। तो, इस