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

मैजिक स्क्वायर


मैजिक स्क्वायर एक वर्ग मैट्रिक्स है, जिसका क्रम विषम है और जहां प्रत्येक पंक्ति या प्रत्येक स्तंभ या प्रत्येक विकर्ण के लिए तत्वों का योग समान है।

मैजिक स्क्वायर

इस सूत्र का उपयोग करके प्रत्येक पंक्ति या प्रत्येक स्तंभ या प्रत्येक विकर्ण का योग ज्ञात किया जा सकता है। n(n2+ 1)/2

मैजिक स्क्वायर बनाने के नियम यहां दिए गए हैं -

  • हम मैट्रिक्स की पहली पंक्ति के मध्य कॉलम से शुरू करेंगे, और अगला नंबर रखने के लिए हमेशा ऊपरी बाएं कोने में जाएंगे
  • यदि पंक्ति अधिक हो जाती है, या पंक्ति मैट्रिक्स में नहीं है, तो कॉलम को बाएं कॉलम के रूप में बदलें और संख्या को मैट्रिक्स की अंतिम पंक्ति पर रखें, और फिर से ऊपरी बाएं कोने पर जाएं।
  • यदि कॉलम अधिक हो गया है, या कॉलम मैट्रिक्स में नहीं है, तो पंक्ति को शीर्ष पंक्ति के रूप में बदलें और उस मैट्रिक्स के अंतिम कॉलम पर नंबर रखें, फिर ऊपरी बाएं कोने पर जाएं।
  • जब ऊपरी बायां कोना खाली न हो या पंक्ति और स्तंभ दोनों सीमा से अधिक हो, तो संख्या को अंतिम संख्या के नीचे रखें।

इनपुट और आउटपुट

Input:
The order of the matrix 5
Output:
15 8  1  24 17
16 14 7  5  23
22 20 13 6   4
3  21 19 12 10
9  2  25 18 11

एल्गोरिदम

createSquare(mat, r, c)

इनपुट: मैट्रिक्स।

आउटपुट: पंक्ति और स्तंभ।

Begin
   count := 1
   fill all elements in mat to 0
   range := r * c
   i := 0
   j := c/2
   mat[i, j] := count //center of top row

   while count < range, do
      increase count by 1
      if both i and j crosses the matrix range, then
         increase i by 1
      else if only i crosses the matrix range, then
         i := c – 1
         decrease j by 1
      else if only j crosses the matrix range, then
         j := c – 1
         decrease i by 1
      else if i and j are in the matrix and element in (i, j) ≠ 0, then
         increase i by 1
      else
         decrease i and j by 1
      mat[i, j] := count
   done
   display the matrix mat
End

उदाहरण

#include<iostream>
#include<iomanip>
using namespace std;

void createSquare(int **array, int r, int c) {
   int i, j, count = 1, range;
   for(i = 0; i<r; i++)
      for(j = 0; j<c; j++)
         array[i][j] = 0;    //initialize all elements with 0

   range = r*c;
   i = 0;
   j = c/2;
   array[i][j] = count;

   while(count < range) {
      count++;
      if((i-1) < 0 && (j-1) < 0)    //when both row and column crosses the range
         i++;  
      else if((i-1) <0) {    //when only row crosses range, set i to last row, and decrease j
         i = r-1;
         j--;
      }else if((j-1) < 0) {    //when only col crosses range, set j to last column, and decrease i
         j = c-1;
         i--;  
      }else if(array[i-1][j-1] != 0)    //when diagonal element is not empty, go to next row
         i++;
      else{
         i--;
         j--;
      }
      array[i][j] = count;
   }

   // Printing the square
   for(i = 0; i<r; i++) {
      for(j = 0; j<c; j++)
         cout <<setw(3) << array[i][j];
      cout << endl;
   }
}

main() {
   int** matrix;
   int row, col;
   cout << "Enter the order(odd) of square matrix :";
   cin >> row;
   col = row;
   
   matrix = new int*[row];
   
   for(int i = 0; i<row; i++) {
      matrix[i] = new int[col];
   }
   createSquare(matrix, row, col);
}

आउटपुट

Enter the order(odd) of square matrix :5
15  8  1 24 17
16 14  7  5 23
22 20 13  6  4
 3 21 19 12 10
 9  2 25 18 11

  1. C . में एक विषम वर्ग मैट्रिक्स में मध्य पंक्ति और स्तंभ का गुणनफल

    एक वर्ग मैट्रिक्स को देखते हुए, mat[row][column] जहां पंक्ति और स्तंभ समान हैं और विषम लंबाई के हैं, इसका मतलब है कि पंक्ति और स्तंभ की संख्या मुझे विषम होनी चाहिए, अर्थात, से विभाज्य नहीं है 2, कार्य उस मैट्रिक्स की मध्य पंक्ति और मध्य स्तंभ के गुणनफल को खोजना है। जैसे नीचे दिए गए चित्र में - बा

  1. एक वर्ग के अंदर एक पत्ती का क्षेत्रफल?

    यहां हम देखेंगे कि नीचे दिए गए पत्ते के आकार का क्षेत्रफल कैसे प्राप्त करें, जो वर्ग ABCD के अंदर मौजूद है। वर्ग की प्रत्येक भुजा की लंबाई a है। पत्ती के दो बराबर भाग होते हैं। प्रत्येक भाग का क्षेत्रफल p कहा जाता है, अब - और पूरी पत्ती का क्षेत्रफल 2p है। उदाहरण #include <iostream> usin

  1. सी++ में सुडोकू सॉल्वर

    मान लीजिए कि हमारे पास सुडोकू ग्रिड है और हमें इस प्रसिद्ध संख्या भूलभुलैया समस्या, सुडोकू को हल करना है। हम जानते हैं कि सुडोकू एक 9 x 9 नंबर का ग्रिड है, और पूरे ग्रिड को भी 3 x 3 बॉक्स में विभाजित किया गया है सुडोकू को हल करने के लिए कुछ नियम हैं। इस समस्या को हल करने के लिए हमें अंक 1 से 9 तक