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

सी ++ में ग्रिड में जादू वर्ग

मान लीजिए कि हमारे पास एक ग्रिड है, हमें उस ग्रिड में मैजिक स्क्वायर सब-ग्रिड की संख्या ज्ञात करनी है। मैजिक स्क्वायर एक 3 x 3 ग्रिड होता है जो 1 से 9 तक की अलग-अलग संख्याओं से भरा होता है, जैसे कि प्रत्येक पंक्ति, स्तंभ और दोनों विकर्णों का योग समान होता है।

तो, अगर इनपुट पसंद है

4 3 8 4
9 5 1 9
2 7 6 2

तो आउटपुट 1 होगा, क्योंकि मैजिक स्क्वायर है

4 3 8
9 5 1
2 7 6

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

  • मानों के साथ एक सेट परिभाषित करें:[816357492, 834159672, 618753294, 672159834,492357816, 438951276, 294753618, 276951438]
  • आकार की एक सरणी ऑफ़सेट परिभाषित करें:9 x 2:={{-2,-2},{-2,-1},{-2,0},{-1,-2},{-1 ,-1},{-1,0},{0,-2},{0,-1},{0,0}}
  • उत्तर:=0
  • इनिशियलाइज़ i :=2 के लिए, जब i <ग्रिड रो काउंट, अपडेट (i 1 से बढ़ाएँ), −
      करें
    • इनिशियलाइज़ j :=2 के लिए, जब j <ग्रिड रो काउंट, अपडेट (j को 1 से बढ़ाएँ), करें -
      • योग :=0
      • इनिशियलाइज़ k :=0 के लिए, जब k <9, अपडेट करें (k को 1 से बढ़ाएँ), करें -
        • योग :=योग * 10
        • योग :=योग + ग्रिड[i + ऑफ़सेट[k, 0], j + ऑफ़सेट[k, 1]]
      • Ans :=ans + s में योग का घटित होना
  • वापसी उत्तर

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int numMagicSquaresInside(vector<vector<int>>& grid) {
      const unordered_set<int> s{816357492, 834159672, 618753294,
      672159834,492357816, 438951276, 294753618,276951438};
      const int offset[][2] = {{-2, -2}, {-2, -1}, {-2, 0},{-1, -2}, {-1, -1}, {-1, 0},
{ 0, -2}, { 0, -1}, { 0, 0}};
      int ans = 0;
      for(int i = 2; i< grid.size(); i++)
      {
         for(int j = 2; j<grid.size(); j++)
         {
            int sum = 0;
            for(int k = 0; k<9; k++)
            {
               sum *= 10;
               sum += grid[i + offset[k][0]][j+offset[k][1]];
            }
            ans += s.count(sum);
         }
      }
      return ans;
   }
};
main(){
   Solution ob;
   vector<vector<int>> v = {{4,3,8,4},{9,5,1,9},{2,7,6,2}};
   cout << (ob.numMagicSquaresInside(v));
}

इनपुट

{{4,3,8,4},{9,5,1,9},{2,7,6,2}}

आउटपुट

1

  1. जाँच करें कि क्या कोई संख्या जादू है (अंकों का पुनरावर्ती योग 1 है) C++ में

    यहां हम एक प्रोग्राम देखेंगे, जो यह जांच सकता है कि कोई नंबर मैजिक नंबर है या नहीं। एक संख्या को जादुई संख्या कहा जाता है, जब अंकों का पुनरावर्ती योग 1 होता है। मान लीजिए कि कोई संख्या 50311 =5 + 0 + 3 + 1 + 1 =10 =1 + 0 =1 जैसी है, यह जादुई संख्या है। यह जांचने के लिए कि कोई संख्या जादू है या नहीं

  1. सी ++ में विभाज्य योग?

    यहाँ हम देखेंगे कि विभाज्य योग क्या है? n का विभाज्य योग n को छोड़कर n के सभी पूर्ण गुणनखंडों का योग है। उदाहरण के लिए, यदि संख्या 20 है, तो पूर्ण गुणनखंड (1, 2, 4, 5, 10) हैं। तो विभाज्य योग 22 है। एक दिलचस्प तथ्य यह है कि, यदि किसी संख्या का विभाज्य योग ही वह संख्या है, तो वह संख्या एक पूर्ण संख्

  1. सी ++ प्रोग्राम पहले एन प्राकृतिक संख्याओं के वर्गों के योग के लिए?

    इस समस्या में हम देखेंगे कि हम पहली n प्राकृत संख्याओं के वर्गों का योग कैसे प्राप्त कर सकते हैं। यहां हम लूप के लिए एक का उपयोग कर रहे हैं, जो 1 से n तक चलता है। प्रत्येक चरण में हम पद के वर्ग की गणना कर रहे हैं और फिर इसे योग में जोड़ रहे हैं। इस प्रोग्राम को पूरा होने में O(n) समय लगता है। लेकिन