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

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


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

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

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

इनपुट

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

आउटपुट

मौजूद मैजिक स्क्वेयर: 0

व्याख्या: मैट्रिक्स रूप में समझने के लिए:

1230
4561
7890

सभी तत्व 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 } };

आउटपुट

मौजूद मैजिक स्क्वेयर: 1

व्याख्या: मैट्रिक्स रूप में समझने के लिए:

1684
8160
3571
4920

सभी संख्याएं अद्वितीय हैं और 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 दोनों विकर्णों के मध्य में है।

प्रयुक्त दृष्टिकोण

  • पूर्णांक सरणी Grid[][] संख्याओं को संग्रहीत करती है, row और col इसके आयाम संग्रहीत करते हैं।
  • फ़ंक्शन magicSquare(int a, int b...int i) सभी 9 तत्वों को इनपुट के रूप में लेता है और जांचता है कि क्या यह मैजिक स्क्वेयर बनाता है। यदि मैजिक स्क्वेयर है तो 1 लौटाता है, अन्यथा 0 लौटाता है।
  • यहां हम सरणी arr[9] लेंगे ताकि सभी पैरामीटर संग्रहीत हो सकें और जांचें कि क्या वे इसमें अद्वितीय सेल पर कब्जा करके अद्वितीय हैं। यदि किसी सेल में काउंट<1 है तो संख्या 1 से 9 की रेंज में नहीं है, या यदि काउंट>1 तो संख्या अद्वितीय नहीं है। फ्लैग=0 सेट करें।
  • यदि फ्लैग 1 है तो हम पंक्ति, कॉलम, विकर्ण योग को 15 के रूप में जांचेंगे। यदि सच है तो यह एक मैजिक स्क्वेयर है। 1 लौटाएं अन्यथा 0 लौटाएं।
  • फ़ंक्शन countSquares(int G[3][4],int R, int C) एक ग्रिड, इसकी पंक्तियों और कॉलम को इनपुट के रूप में लेता है और इसमें मौजूद मैजिक स्क्वेयर की संख्या गिनता है।
  • Count का उपयोग ऐसे स्क्वेयर की संख्या संग्रहीत करने के लिए किया जाता है।
  • पहले तत्व से row-2, col-2 (3x3 मैट्रिक्स) तक पार करना शुरू करें।
  • यदि विकर्ण का मध्य G[i+1][j+1] 5 नहीं है तो मैजिक स्क्वेयर संभव नहीं है, वर्तमान इटरेशन को छोड़ दें।
  • अन्यथा सभी 9 तत्वों की जांच magicSquare(int a से 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 लौटाता है तो count बढ़ाएं।
  • अंत में वांछित परिणाम के रूप में count लौटाएं।

उदाहरण कोड

#include <bits/stdc++.h> using namespace std; // जांचें कि उपग्रिड मैजिक स्क्वेयर है या नहीं int magicSquare(int a, int b, int c, int d, int e, int f, int g, int h, int i){ int flag=1; // सभी संख्याओं को अद्वितीय और 1 से 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) //हर संख्या ठीक एक बार होती है{ flag=0; break; } // सभी योगों की जांच 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]); // मैजिक स्क्वेयर उपग्रिड की जांच 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 <<"ग्रिड में मैजिक स्क्वेयर की संख्या: "<<countSquares(Grid,row,col); return 0; }

आउटपुट

ग्रिड में मैजिक स्क्वेयर की संख्या: 1

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

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

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

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

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

    =B। लक्ष्य LxB आकार के आयत में समायोजित किए जा सकने वाले वर्गों की संख्या ढूंढना है। उपरोक्त आकृति 3x2 आकार के एक आयत को दर्शाती है। इसमें 2, 2x2 वर्ग और 6, 1x1 वर्ग हैं। कुल वर्ग = 6+2=8। LxB आकार के हर आयत में L*B संख्या के 1x1 वर्ग होते हैं। सबसे बड़े वर्ग BxB आकार के होते हैं। L=B=1 के लिए, वर