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

C++ में बोर्ड पर युद्धपोत गिनना


मान लीजिए हमारे पास एक 2D बोर्ड है। हमें गिनना है कि इसमें कितने युद्धपोत (battleships) हैं। युद्धपोत 'X' से दर्शाए जाते हैं, खाली स्लॉट '.' से। नियम:

  • वैध बोर्ड: केवल युद्धपोत या खाली स्लॉट।
  • युद्धपोत केवल क्षैतिज (1xN) या लंबवत (Nx1) रखे जा सकते हैं।
  • दो युद्धपोतों के बीच कम से कम एक क्षैतिज या लंबवत सेल का अंतर होता है।

उदाहरण:

X . . X
. . . X
. . . X
आउटपुट: 2 (दो युद्धपोत)।

एक-पास स्कैन (O(1) स्पेस)

केवल युद्धपोत के "हेड" (सबसे ऊपर-बायाँ सेल) गिनें। एक सेल हेड है यदि:

  • वह 'X' है।
  • उसके ऊपर कोई 'X' नहीं है (या वह पहली पंक्ति है)।
  • उसके बाएँ कोई 'X' नहीं है (या वह पहला कॉलम है)।

C++ कार्यान्वयन

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

class Solution {
public:
    int countBattleships(vector<vector<char>>& board) {
        int ans = 0;
        int n = board.size();
        int m = board[0].size();
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (board[i][j] == '.') continue;
                if (i > 0 && board[i-1][j] == 'X') continue;
                if (j > 0 && board[i][j-1] == 'X') continue;
                ans++;
            }
        }
        return ans;
    }
};

int main() {
    vector<vector<char>> v = {{'X','.','.','X'},{'.','.','.','X'},{'.','.','.','X'}};
    Solution ob;
    cout << ob.countBattleships(v); // 2
    return 0;
}

इनपुट

[["X",".",".","X"],[".",".",".","X"],[".",".",".","X"]]

आउटपुट

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

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

  1. C++ में बोर्ड को वर्गों में काटने की न्यूनतम लागत C++ में बोर्ड को वर्गों में काटने की न्यूनतम लागत

    अवधारणा मान लीजिए लंबाई p और चौड़ाई q का एक बोर्ड दिया गया है, हमें इस बोर्ड को p*q वर्गों में तोड़ना है ताकि तोड़ने की लागत न्यूनतम हो। इस बोर्ड के लिए, प्रत्येक किनारे के लिए काटने की लागत दी जाएगी। संक्षेप में, हमें काटने का ऐसा क्रम चुनना है जिससे लागत न्यूनतम हो। उदाहरण उपरोक्त बोर्ड को वर्गो

  1. - लिनक्स पर C++ के लिए सर्वश्रेष्ठ IDE कौन सा है?

    बड़े प्रोजेक्ट्स को केवल टेक्स्ट एडिटर्स पर प्रबंधित करना मुश्किल होता है। ऐसे मामलों में IDE का उपयोग करने से आप अधिक उत्पादक और कम निराश होंगे। विभिन्न प्रकार के IDE उपलब्ध हैं और आपको अपनी आवश्यकताओं के अनुरूप सही चुनना चाहिए। लिनक्स पर C++ के लिए कोई एक सर्वश्रेष्ठ IDE नहीं है; आपको अपने टूल को