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

मैजिक स्क्वायर (जादुई वर्ग)


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

मैजिक स्क्वायर (जादुई वर्ग)

प्रत्येक पंक्ति या प्रत्येक कॉलम या प्रत्येक विकर्ण का योग इस सूत्र का उपयोग करके पाया जा सकता है: n(n² + 1)/2

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

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

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

इनपुट: मैट्रिक्स का क्रम 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

एल्गोरिदम

createSquare(mat, r, c)

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

आउटपुट: पंक्ति और कॉलम।

Begin
    count := 1
    mat में सभी तत्वों को 0 से भरें
    range := r * c
    i := 0
    j := c/2
    mat[i, j] := count //शीर्ष पंक्ति का केंद्र
    while count < range, do
        increase count by 1
        if दोनों i और j मैट्रिक्स रेंज को पार करते हैं, then
            increase i by 1
        else if केवल i मैट्रिक्स रेंज को पार करता है, then
            i := c - 1
            decrease j by 1
        else if केवल j मैट्रिक्स रेंज को पार करता है, then
            j := c - 1
            decrease i by 1
        else if i और j मैट्रिक्स में हैं और (i, j) में तत्व ≠ 0, then
            increase i by 1
        else
            decrease i और j by 1
        mat[i, j] := count
    done
    मैट्रिक्स mat प्रदर्शित करें
End

उदाहरण (C++)

#include 
#include 
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; //सभी तत्वों को 0 से आरंभ करें
    range = r*c;
    i = 0;
    j = c/2;
    array[i][j] = count;
    while(count < range) {
        count++;
        if((i-1) < 0 && (j-1) < 0) //जब दोनों पंक्ति और कॉलम रेंज को पार करते हैं
            i++;
        else if((i-1) < 0) { //जब केवल पंक्ति रेंज को पार करती है, i को अंतिम पंक्ति पर सेट करें, और j घटाएं
            i = r-1;
            j--;
        } else if((j-1) < 0) { //जब केवल कॉलम रेंज को पार करता है, j को अंतिम कॉलम पर सेट करें, और i घटाएं
            j = c-1;
            i--;
        } else if(array[i-1][j-1] != 0) //जब विकर्ण तत्व खाली नहीं है, अगली पंक्ति पर जाएं
            i++;
        else {
            i--;
            j--;
        }
        array[i][j] = count;
    }
    //वर्ग प्रिंट करना
    for(i = 0; i < r; i++) {
        for(j = 0; j < c; j++)
            cout << setw(3) << array[i][j];
        cout << endl;
    }
}
int main() {
    int** matrix;
    int row, col;
    cout << "वर्ग मैट्रिक्स का क्रम (विषम) दर्ज करें: ";
    cin >> row;
    col = row;
    matrix = new int*[row];
    for(int i = 0; i < row; i++) {
        matrix[i] = new int[col];
    }
    createSquare(matrix, row, col);
}

आउटपुट

वर्ग मैट्रिक्स का क्रम (विषम) दर्ज करें: 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 में विषम वर्ग मैट्रिक्स की मध्य पंक्ति और स्तंभ का गुणनफल C में विषम वर्ग मैट्रिक्स की मध्य पंक्ति और स्तंभ का गुणनफल

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

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

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

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

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