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

C++ में एक ग्रिड में मैजिक स्क्वायर गिनें

हमें संख्याओं के एक मैट्रिक्स के साथ दिया गया है। लक्ष्य दिए गए मैट्रिक्स के अंदर मौजूद जादुई वर्गों की संख्या ज्ञात करना है।

एक मैजिक स्क्वायर, यदि मैट्रिक्स के रूप में लिया जाता है, तो एक 3X3 मैट्रिक्स होता है जिसमें सुडोकू में ग्रिड की तरह 1 से 9 तक के तत्व होते हैं। गुण हैं -

  • सभी नंबर बिल्कुल एक बार आते हैं।
  • मैट्रिक्स में सभी 9 कोशिकाओं का योग 45 है।
  • 3 की प्रत्येक पंक्ति का योग 15 है।
  • 3 के प्रत्येक कॉलम का योग 15 है।
  • 3 के विकर्णों का योग 5 होता है।
  • इस तरह के योग प्राप्त करने के लिए, 5 हमेशा दोनों विकर्णों के बीच में होता है।

इनपुट

int arr[][]= { { 1,2,3,0 }, { 4,5,6,1 }, { 7,8,9,0 } };

आउटपुट

Magic Squares present: 0

स्पष्टीकरण − समझने के लिए मैट्रिक्स फॉर्म बनाना −

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

सभी तत्व 1 से 9 के बीच हैं और अद्वितीय हैं। लेकिन,

1+2+3=6 !=4+5+6=15 !=7+8+9=23

साथ ही विकर्णों का योग 15 के बराबर नहीं होता है।

इनपुट

arr[][]= { { 1,2,3,0 }, { 4,5,6,1 }, { 7,8,9,0 } };

आउटपुट

Magic Squares present : 1

स्पष्टीकरण − समझने के लिए मैट्रिक्स फॉर्म बनाना −

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

सभी नंबर अद्वितीय हैं और 1 से 9 की सीमा में हैं।

पंक्तियों का योग, 8+1+6=3+5+7=4+9+2=15

कॉलम योग, 8+3+4=1+5+9=6+7+2=15

विकर्णों का योग, 8+5+2=4+5+6=15

साथ ही 1 से 9 जोड़ने पर हमें 45 मिलता है, और 5 दोनों विकर्णों के बीच में होता है।

नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है

  • पूर्णांक सरणी ग्रिड [] [] संख्याओं को संग्रहीत करता है, पंक्ति और कॉल इसके आयामों को संग्रहीत करता है।

  • फंक्शन मैजिकस्क्वायर (int a, int b…..int i) सभी 9 तत्वों को इनपुट के रूप में लेता है और जांचता है कि क्या यह मैजिक स्क्वायर बनाता है। अगर मैजिक स्क्वायर है तो 1 लौटाता है, अन्यथा 1 लौटाता है।

  • यहां हम सभी मापदंडों को संग्रहीत करने के लिए सरणी गिरफ्तारी [9] लेंगे और जांच करेंगे कि क्या वे अद्वितीय हैं, यह जांच कर कि वे इसमें अद्वितीय कोशिकाओं पर कब्जा करते हैं। यदि किसी सेल की गिनती है<1 का मतलब नहीं है। 1 से 9 की सीमा में नहीं है, या यदि गिनती> 1 है तो नहीं। अद्वितीय नहीं है। ध्वज सेट करें=0

  • यदि ध्वज 1 है तो हम पंक्ति, स्तंभ, विकर्ण योगों को 15 के रूप में जांचेंगे। यदि सत्य है तो यह जादुई वर्ग है। 1 और वापसी 0.

  • फंक्शन काउंट स्क्वायर (इंट जी [3] [4], इंट आर, इंट सी) एक ग्रिड लेता है, इसकी पंक्तियों और स्तंभों को इनपुट के रूप में और संख्या की गणना करता है। इसमें मौजूद जादुई वर्गों का।

  • ऐसे वर्गों की संख्या की गणना करने के लिए गणना का उपयोग किया जाता है।

  • पहले एलिमेंट से रो-2, col-2 (3X3 मैट्रिक्स) तक ट्रैवर्सिंग शुरू करें

  • यदि विकर्ण G[i+1][j+1] का मध्य 5 नहीं है तो मैजिक स्क्वायर संभव नहीं है, वर्तमान पुनरावृत्ति को छोड़ दें।

  • अन्य सभी 9 तत्वों को मैजिकस्क्वायर (int a to i) में पास करके जांचें

  • G[i][j] सहित सभी 9 तत्व G[i+1][j], G[i+2][j],G[i+1][j+1],G[i][j] हैं +1],G[i][j+2],G[i+2][j+2],G[i+2][j+1], G[i+1][j+2]

  • अगर यह 1 वृद्धि गिनती लौटाता है।

  • अंत में वांछित परिणाम के रूप में वापसी की गणना करें।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
// to check is subgrid is Magic Square
int magicSquare(int a, int b, int c, int d, int e,
int f, int g, int h, int i){
   int flag=1; // to mark all numbers are unique and between 1 to 9
   int arr[9]={0};
   arr[a-1]++;
   arr[b-1]++;
   arr[c-1]++;
   arr[d-1]++;
   arr[e-1]++;
   arr[f-1]++;
   arr[g-1]++;
   arr[h-1]++;
   arr[i-1]++;
   for(int i=0;i<9;i++)
      if(arr[i]>1 || arr[i]<1) //every number occurs exactly once{
         flag=0;
         break;
   }
   // checking all sums as 15
   if (flag==1 && (a + b + c) == 15 && (d + e + f) == 15 && (g + h + i) == 15 && (a + d + g) == 15 &&(b + e + h) == 15 && (c + f + i) == 15 &&(a + e + i) == 15 && (c + e + g) == 15)
   return 1;
   return 0;
}
int countSquares(int G[3][4],int R, int C){
   int count = 0;
   for (int i = 0; i < R - 2; i++)
      for (int j = 0; j < C - 2; j++) {
         if (G[i + 1][j + 1] != 5)
            continue;
      int ismagic=magicSquare(G[i][j], G[i][j + 1], G[i][j + 2], G[i + 1][j], G[i + 1][j + 1],
      G[i + 1][j + 2], G[i + 2][j], G[i + 2][j + 1], G[i + 2][j + 2]);
      // check for magic square subgrid
      if (ismagic==1)
         count++;
      }
      return count;
}
int main(){
   int Grid[3][4] = { { 4, 3, 8, 4 },{ 9, 5, 1, 9 },{ 2, 7, 6, 2 } };
   int row=3;
   int col=4;
   cout <<"Count of Magic Squares in Grid: "<<countSquares(Grid,row,col);
   return 0;
}

आउटपुट

Count of Magic Squares in Grid: 1

  1. सी ++ में ग्रिड में दी गई दिशा में संभावित चालों की गणना करें

    हम दो चर n और m हैं जो n x m आकार के ग्रिड का प्रतिनिधित्व करते हैं और प्रारंभिक बिंदु x, y से शुरू करते हैं। कदमों/चालों के जोड़े भी दिए गए हैं जिन्हें चाल ((1,1), (2,2)) आदि के रूप में ग्रिड के अंदर ले जाया जा सकता है। चालों की प्रत्येक जोड़ी x,y अक्ष में उठाए गए कदमों की इकाई का प्रतिनिधित्व करत

  1. C++ में समतल में समांतर चतुर्भुजों की संख्या

    हमें एक समतल दिया गया है जिसमें समांतर चतुर्भुज बनाने वाले बिंदु हैं और कार्य समांतर चतुर्भुजों की गणना करना है जो दिए गए बिंदुओं का उपयोग करके बनाए जा सकते हैं। समांतर चतुर्भुज में एक चतुर्भुज के विपरीत पक्ष समानांतर होते हैं और इसलिए विपरीत कोण बराबर होते हैं। इनपुट - int a[] = {0, 2, 5, 5, 2, 5,

  1. C++ में एक आयत में वर्गों की संख्या गिनें

    =B. लक्ष्य उन वर्गों की संख्या का पता लगाना है जिन्हें LXB आकार का एक आयत समायोजित कर सकता है। ऊपर दिया गया चित्र 3 X 2 आकार का एक आयत दिखाता है। इसमें 2, 2X2 वर्ग और 6,1X1 वर्ग हैं। कुल वर्ग=6+2=8. LXB आकार के प्रत्येक आयत में L*B संख्या 1X1 वर्ग होती है। सबसे बड़े वर्ग BXB आकार के होते ह