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

सी प्रोग्राम दिए गए तार के क्रमपरिवर्तन को खोजने के लिए

मान लीजिए कि हमारे पास एक सरणी में कुछ तार हैं। हमें उनके सभी क्रमपरिवर्तन अलग-अलग पंक्तियों में खोजने होंगे।

इसलिए, यदि इनपुट स्ट्रिंग्स =["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
    • अगर s[j] <=s[i - 1]), तो:
      • लूप से बाहर आएं
    • t :=s[i - 1]
  • s[i - 1] =s[j - 1]
  • s[j - 1] =t
  • i
  • टी:=एस[i]
  • s[i] :=s[n - 1]
  • s[n - 1] =t
  • वापसी 1
  • इनिशियलाइज़ i :=0 के लिए, जब i
  • टी:=एस[i]
  • s[i] :=s[n - 1]
  • s[n - 1] =t
  • वापसी 0
  • मुख्य विधि से निम्न कार्य करें
  • निम्नलिखित को असीम रूप से तब तक करें जब तक कि next_permutation(n, string) 0 न हो जाए{
    • इनिशियलाइज़ i :=0 के लिए, जब i
    • स्ट्रिंग प्रदर्शित करें[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. सी प्रोग्राम दिए गए फैक्टोरियल में अनुगामी शून्य खोजने के लिए

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

    1. सी प्रोग्राम गैर-पुनरावर्ती फ़ंक्शन का उपयोग करके संख्याओं की जीसीडी खोजने के लिए

      समस्या गैर-पुनरावर्ती फ़ंक्शन का उपयोग करके दिए गए दो नंबरों के लिए सबसे बड़ा सामान्य भाजक (जीसीडी) खोजें। समाधान यह नीचे बताया गया है कि गैर-पुनरावर्ती फ़ंक्शन का उपयोग करके दिए गए दो नंबरों के लिए सबसे बड़ा सामान्य भाजक (जीसीडी) कैसे खोजें। एल्गोरिदम गैर-पुनरावर्ती फ़ंक्शन का उपयोग करके दिए गए

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

      इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें एक स्ट्रिंग दी गई है जिसकी हमें स्ट्रिंग के सभी संभावित क्रमपरिवर्तन प्रदर्शित करने की आवश्यकता है। आइए अब नीचे दिए गए कार्यान्वयन में समाधान देखें - उदाहरण # conversion def toString(List):    return &