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

C प्रोग्राम में O(1) अतिरिक्त स्थान का उपयोग करके n x ​​n सर्पिल मैट्रिक्स प्रिंट करें।

हमें एक धनात्मक पूर्णांक n दिया गया है और n x n का एक सर्पिल मैट्रिक्स बनाते हैं, केवल O(1) अतिरिक्त स्थान का उपयोग करके दक्षिणावर्त दिशा में

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

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

C प्रोग्राम में O(1) अतिरिक्त स्थान का उपयोग करके n x ​​n सर्पिल मैट्रिक्स प्रिंट करें।

उदाहरण

Input: 3
Output:
   9 8 7
   2 1 6
   3 4 1

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

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

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)
START
STEP 1: DECLARE i, j, a, b, x
STEP 2: LOOP FOR i = 0 AND i < n AND i++
   LOOP FOR j = 0 AND j < n AND j++
      FIND THE MINIMUM IN (i<j ) AND ASSIGN IT TO a
      FIND THE MINIMUM (n-1-i) < (n-1-j) AND ASSIGN IT TO b
      THEN ASSIGN THE LEAST VALUE FROM a AND b TO x
      IF i <= j THEN,
         PRINT THE VALUE OF 2* ((n-2*x)*(n-2*x) - (i-x) - (j-x))
      ELSE
         PRINT THE VALUE OF 2*((n-2*x-2)*(n-2*x2) + (i-x) + (j-x))
   END LOOP
   PRINT NEWLINE
END LOOP
STOP

उदाहरण

#include <stdio.h>
//For n x n spiral matrix
int spiralmatrix(int n){
   int i, j, a, b, x; // x stores the layer in which (i, j)th element exist
   for ( i = 0; i < n; i++){
      for ( j = 0; j < n; j++){
         // Finds minimum of four inputs
         a = ((i<j ? i : j));
         b = ((n-1-i) < (n-1-j) ? (n-1-i) : (n-1-j));
         x = a < b ? a : b;
         // For upper right half
         if (i <= j)
            printf("%d\t ", 2 * ((n-2*x)*(n-2*x) - (i-x) - (j-x)));
            // for lower left half
         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. सी प्रोग्राम में मैट्रिक्स विकर्ण पैटर्न में प्रिंट नंबर।

    कार्य विकर्ण पैटर्न के n x ​​n के मैट्रिक्स को प्रिंट करना है। यदि n 3 है तो विकर्ण पैटर्न में एक मैट्रिक्स को प्रिंट करना है - तो आउटपुट इस तरह होगा - उदाहरण Input: 3 Output:    1 2 4    3 5 7    6 8 9 Input: 4 Output:    1 2 4  7    3 5

  1. सी प्रोग्राम में मैट्रिक्स को तिरछे नीचे की ओर प्रिंट करें।

    आकार n x n की एक सरणी के साथ दिया गया है और कार्य पूर्णांक प्रकार के मैट्रिक्स तत्वों को तिरछे नीचे की ओर प्रिंट करना है। तिरछे नीचे की ओर का अर्थ है n x n के किसी भी आकार की सरणी को तिरछे नीचे की ओर ले जाना जैसे नीचे दिए गए चित्र में प्रिंट करना - सबसे पहले यह 1 प्रिंट करेगा और फिर 2 प्रिंट करन

  1. सी प्रोग्राम में अतिरिक्त स्थान और संशोधन के बिना एक लिंक्ड सूची का उल्टा प्रिंट करें।

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