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

C प्रोग्राम में O(1) एक्स्ट्रा स्पेस का उपयोग करके n x n स्पाइरल मैट्रिक्स प्रिंट करना


हमें एक पॉजिटिव इंटीजर n दिया गया है और केवल O(1) एक्स्ट्रा स्पेस का उपयोग करके क्लॉकवाइज दिशा में n x n का स्पाइरल मैट्रिक्स बनाना है।

स्पाइरल मैट्रिक्स एक मैट्रिक्स है जो स्पाइरल की तरह काम करता है जो एक सर्कल के मूल से शुरू होकर क्लॉकवाइज फैशन में घूमता है। इसलिए कार्य O(1) स्पेस का उपयोग करके मैट्रिक्स को स्पाइरल फॉर्म में प्रिंट करना है जो 2 → 4 → 6 → 8 → 10 → 12 → 14 → 16 → 18 से शुरू होता है।

नीचे स्पाइरल मैट्रिक्स का उदाहरण दिया गया है:

C प्रोग्राम में O(1) एक्स्ट्रा स्पेस का उपयोग करके n x n स्पाइरल मैट्रिक्स प्रिंट करना

उदाहरण

इनपुट: 3
आउटपुट:
  18 16 14
  4  2  12
  6  8  10

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

ऊपरी दाएं आधे के लिए,

mat[i][j] = (n-2*x)*(n-2*x) - (i-x) - (j-x)

निचले बाएं आधे के लिए,

mat[i][j] = (n-2*x-2)*(n-2*x-2) + (i-x) + (j-x)

नोट - हम 2 के गुणक के लिए मैट्रिक्स प्रिंट करने का प्रोग्राम लिख रहे हैं

एल्गोरिदम

int spiralmatrix(int n)
शुरुआत
चरण 1: i, j, a, b, x घोषित करें
चरण 2: i = 0 से n तक i++ लूप
   j = 0 से n तक j++ लूप
      (i

उदाहरण

#include <stdio.h>
// n x n स्पाइरल मैट्रिक्स के लिए
int spiralmatrix(int n){
    int i, j, a, b, x; // x वह लेयर स्टोर करता है जिसमें (i, j)वां एलिमेंट मौजूद है
    for ( i = 0; i < n; i++){
        for ( j = 0; j < n; j++){
            // चार इनपुट में न्यूनतम ढूंढें
            a = ((i < j ? i : j));
            b = ((n-1-i) < (n-1-j) ? (n-1-i) : (n-1-j));
            x = a < b ? a : b;
            // ऊपरी दाएं आधे के लिए
            if (i <= j)
                printf("%d\t ", 2 * ((n-2*x)*(n-2*x) - (i-x) - (j-x)));
            // निचले बाएं आधे के लिए
            else
                printf("%d\t ", 2*((n-2*x-2)*(n-2*x-2) + (i-x) + (j-x)));
        }
        printf("\n");
    }
}
int main(int argc, char const *argv[]){
    int n = 3;
    spiralmatrix(n);
    return 0;
}

आउटपुट

यदि हम उपरोक्त प्रोग्राम चलाते हैं तो यह निम्नलिखित आउटपुट उत्पन्न करेगा:

18 16 14
4  2  12
6  8  10

  1. C प्रोग्राम में मैट्रिक्स में विकर्ण पैटर्न में संख्याएं प्रिंट करना C प्रोग्राम में मैट्रिक्स में विकर्ण पैटर्न में संख्याएं प्रिंट करना

    कार्य n x n मैट्रिक्स को विकर्ण पैटर्न में प्रिंट करना है। यदि n 3 है तो विकर्ण पैटर्न में मैट्रिक्स प्रिंट करना है: इसलिए आउटपुट इस तरह होगा: उदाहरण इनपुट: 3 आउटपुट: 1 2 4 3 5 7 6 8 9 इनपुट: 4 आउटपुट: 1 2 4 7 3 5 8 11 6 9 12 14 10 13 15 16 समस्या सुझाव देती है कि हमें एक स

  1. C प्रोग्राम में मैट्रिक्स को विकर्ण रूप से नीचे की ओर प्रिंट करें C प्रोग्राम में मैट्रिक्स को विकर्ण रूप से नीचे की ओर प्रिंट करें

    परिचय दिए गए n x n आकार के ऐरे के तत्वों को विकर्ण रूप से नीचे की ओर प्रिंट करना है। विकर्ण रूप से नीचे की ओर प्रिंट करना इसका अर्थ है n x n आकार के किसी भी ऐरे को विकर्ण रूप से नीचे की ओर प्रिंट करना, जैसा कि नीचे दिए गए चित्र में दिखाया गया है। उदाहरण इनपुट: Matrix[3][3] = { { 1, 2, 3 }, { 4, 5

  1. C प्रोग्राम में अतिरिक्त स्पेस और संशोधन के बिना लिंक्ड लिस्ट का रिवर्स प्रिंट करें C प्रोग्राम में अतिरिक्त स्पेस और संशोधन के बिना लिंक्ड लिस्ट का रिवर्स प्रिंट करें

    समस्या विवरण कार्य लिंक्ड लिस्ट के अंत से शुरू होने वाले नोड्स को प्रिंट करना है बिना अतिरिक्त स्पेस का उपयोग किए, जिसका अर्थ है कि कोई अतिरिक्त वेरिएबल नहीं होना चाहिए, इसके बजाय हेड पॉइंटर जो पहले नोड को इंगित करता है, को स्थानांतरित किया जाएगा। उदाहरण इनपुट: 10 21 33 42 89 आउटपुट: 89 42 33 21 1