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

दिए गए स्ट्रिंग्स के क्रमपरिवर्तन ज्ञात करने के लिए C प्रोग्राम


मान लीजिए हमारे पास एक सरणी में कुछ स्ट्रिंग्स हैं। हमें उन सभी के क्रमपरिवर्तन (permutations) अलग-अलग लाइनों में ज्ञात करने हैं।

उदाहरण के लिए, यदि इनपुट strings = ["abc", "def", "ghi"] है, तो आउटपुट होगा:

abc def ghi abc ghi def def abc ghi def ghi abc ghi abc def ghi def abc

हल करने के चरण

  • next_permutation() फंक्शन परिभाषित करें, जो n, स्ट्रिंग सरणी s लेगा:
  • i := n - 1 से शुरू करें, जब i > 0, i को 1 से घटाते हुए करें:
    • यदि s[i] > s[i - 1], तो:
      • j := i + 1
    • j < n के लिए, j को 1 से बढ़ाते हुए करें:
      • यदि s[j] <= s[i - 1], तो लूप से बाहर निकलें
      • t := s[i - 1]
    • s[i - 1] = s[j - 1]
    • s[j - 1] = t
    • i < n - 1 के लिए, i को 1 से बढ़ाते हुए, n को 1 से घटाते हुए करें:
      • t := s[i]
      • s[i] := s[n - 1]
      • s[n - 1] = t
    • 1 वापस करें
  • i := 0 से शुरू करें, जब i < n - 1, i को 1 से बढ़ाते हुए, n को 1 से घटाते हुए करें:
    • t := s[i]
    • s[i] := s[n - 1]
    • s[n - 1] = t
  • 0 वापस करें
  • मुख्य विधि से निम्नलिखित करें:
  • अनंत लूप में तब तक करें जब तक next_permutation(n, strings) 0 न हो जाए:
    • i := 0 से शुरू करें, जब i < n, i को 1 से बढ़ाते हुए करें:
      • strings[i] प्रदर्शित करें फिर (यदि i, n - 1 के बराबर है तो अगली लाइन पर जाएं, अन्यथा ब्लैंक स्पेस प्रिंट करें)

उदाहरण

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:

#include <stdio.h> #include <string.h> int next_permutation(int n, char **s){     for (int i = n - 1; i > 0; i--)         if (strcmp(s[i], s[i - 1]) > 0){             int j = i + 1;             for (; j < n; j++)                 if (strcmp(s[j], s[i - 1]) <= 0)                     break;             char *t = s[i - 1];             s[i - 1] = s[j - 1];             s[j - 1] = t;             for (; i < n - 1; i++, n--){                 t = s[i];                 s[i] = s[n - 1];                 s[n - 1] = t;             }             return 1;         }     for (int i = 0; i < n - 1; i++, n--){         char *t = s[i];         s[i] = s[n - 1];         s[n - 1] = t;       }     return 0; } int main(){     char *strings[] = {"abc", "def", "ghi"};     int n = 3;     do{         for (int i = 0; i < n; i++)             printf("%s%c", strings[i], i == n - 1 ? '\n' : ' ');     } while (next_permutation(n, strings)); } 

इनपुट

{"abc", "def", "ghi"}

आउटपुट

abc def ghi abc ghi def def abc ghi def ghi abc ghi abc def ghi def abc

  1. - दिए गए फैक्टोरियल में ट्रेलिंग जीरो ज्ञात करने के लिए C प्रोग्राम

    दिए गए फैक्टोरियल में ट्रेलिंग जीरो ज्ञात करने के लिए, आइए नीचे बताए गए तीन उदाहरणों पर विचार करें:उदाहरण 1इनपुट - 4आउटपुट - 0व्याख्या - 4! = 24, कोई ट्रेलिंग जीरो नहीं।फैक्टोरियल 4! = 4 x 3 x 2x 1 = 24। कोई ट्रेलिंग जीरो नहीं यानी 0 के स्थान पर 4 संख्या है।उदाहरण 2इनपुट - 6आउटपुट - 1व्याख्या - 6! =

  1. नॉन-रिकर्सिव फंक्शन का उपयोग करके संख्याओं का GCD खोजने का C प्रोग्राम नॉन-रिकर्सिव फंक्शन का उपयोग करके संख्याओं का GCD खोजने का C प्रोग्राम

    समस्या दो दी गई संख्याओं के लिए महत्तम सामान्य भाजक (GCD) को नॉन-रिकर्सिव फंक्शन का उपयोग करके खोजें। समाधान यह नीचे समझाया गया है कि नॉन-रिकर्सिव फंक्शन का उपयोग करके दो दी गई संख्याओं के लिए महत्तम सामान्य भाजक (GCD) कैसे खोजें। एल्गोरिथम नॉन-रिकर्सिव फंक्शन का उपयोग करके दो दी गई संख्याओं के लि

  1. पायथन प्रोग्राम: दी गई स्ट्रिंग के सभी क्रमपरिवर्तन प्रिंट करें पायथन प्रोग्राम: दी गई स्ट्रिंग के सभी क्रमपरिवर्तन प्रिंट करें

    इस लेख में हम दी गई समस्या के समाधान के बारे में जानेंगे। समस्या कथन हमें एक स्ट्रिंग दी गई है, हमें स्ट्रिंग के सभी संभावित क्रमपरिवर्तन प्रदर्शित करने हैं। उदाहरण # रूपांतरण def toString(List): return .join(List) # क्रमपरिवर्तन def permute(a, l, r): if l == r: print(toString(a))