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

सी प्रोग्राम में सरणी या लूप का उपयोग किए बिना {1,2,3,…n} के सभी सबसेट को प्रिंट करना

एक धनात्मक पूर्णांक n को देखते हुए हमें {1, 2, 3, 4,… n} के सेट के सभी सबसेट को बिना किसी ऐरे या लूप का उपयोग किए प्रिंट करना होगा।

जैसे हमने कोई संख्या दी है जैसे कि 3 s हमें समुच्चय {1, 2, 3} के सभी उपसमुच्चय को प्रिंट करना है जो {1 2 3}, {1 2}, {2 3}, {1 3} होगा। {1}, {2}, {3} { }.

लेकिन हमें यह बिना किसी लूप या ऐरे का उपयोग किए करना है। इसलिए, किसी सरणी या लूप का उपयोग किए बिना इस प्रकार की समस्या को हल करने के लिए केवल रिकर्सन ही संभव तरीका है।

उदाहरण

Input: 3
Output: { 1 2 3 }{ 1 2 }{ 1 3 }{ 1 }{ 2 3 }{ 2 }{ 3 }{ }
Explanation: The set will be {1 2 3} from which we will find the subsets
Input: 4
Output: { 1 2 3 4 }{ 1 2 3 }{ 1 2 4 }{ 1 2 }{ 1 3 4 }{ 1 3 }{ 1 4 }{ 1 }{ 2 3 4 }{ 2 3 }{ 2 4 }{ 2 }{ 3 4 }{ 3 }{ 4 }{ }

दृष्टिकोण हम दी गई समस्या को हल करने के लिए उपयोग करेंगे -

  • संख्या =2^n -1 से 0 तक प्रारंभ करें।
  • संख्या के n संख्या के साथ द्विआधारी प्रतिनिधित्व पर विचार करें।
  • सबसे बाएं बिट से प्रारंभ करें जो 1 का प्रतिनिधित्व करता है, दूसरा बिट 2 का प्रतिनिधित्व करता है और इसी तरह nth बिट तक जो n का प्रतिनिधित्व करता है।
  • यदि बिट सेट है तो उसके अनुरूप संख्या प्रिंट करें।
  • संख्या के सभी मानों के लिए उपरोक्त चरणों का पालन करें जब तक कि यह 0 के बराबर न हो जाए।

आइए बताए गए दृष्टिकोण को विस्तार से समझते हैं कि यह एक साधारण उदाहरण का उपयोग करके कैसे काम करता है -

इनपुट n =3 मानते हुए, इसलिए समस्या num =2^3 - 1 =7 से शुरू होती है

  • 7 का बाइनरी प्रतिनिधित्व
1 1 1
  • संबंधित उपसमुच्चय ⇒
1 2 3

संख्या में से 1 घटाना; अंक =6

  • 6 का बाइनरी प्रतिनिधित्व
1 1 0
  • संबंधित उपसमुच्चय ⇒
<टीडी>
1 2

संख्या में से 1 घटाना; अंक =5

  • 5 का बाइनरी प्रतिनिधित्व
1 0 1
  • संबंधित उपसमुच्चय ⇒
<टीडी>
1 3

संख्या में से 1 घटाना; अंक =4

  • 4 का बाइनरी प्रतिनिधित्व
1 0 0
  • संबंधित उपसमुच्चय ⇒
<टीडी>
<टीडी>
1

इसी तरह हम num =0 तक पुनरावृति करेंगे और सभी सबसेट को प्रिंट करेंगे।

एल्गोरिदम

Start
   Step 1 → In function int subset(int bitn, int num, int num_of_bits)
   If bitn >= 0
      If (num & (1 << bitn)) != 0
         Print num_of_bits - bitn
         subset(bitn - 1, num, num_of_bits);
      Else
         Return 0
      Return 1
   Step 2 → In function int printSubSets(int num_of_bits, int num)
      If (num >= 0)
         Print "{ "
         Call function subset(num_of_bits - 1, num, num_of_bits)
         Print "}"
         Call function printSubSets(num_of_bits, num - 1)
      Else
         Return 0
      Return 1
   Step 3 → In function int main()
      Declare and initialize int n = 4
      Call fucntionprintSubSets(n, (int) (pow(2, n)) -1)
Stop

उदाहरण

#include <stdio.h>
#include <math.h>
// This function recursively prints the
// subset corresponding to the binary
// representation of num.
int subset(int bitn, int num, int num_of_bits) {
   if (bitn >= 0) {
      // Print number in given subset only
      // if the bit corresponding to it
      // is set in num.
      if ((num & (1 << bitn)) != 0) {
         printf("%d ", num_of_bits - bitn);
      }
      // Check the next bit
      subset(bitn - 1, num, num_of_bits);
   }
   else
      return 0;
      return 1;
}
//function to print the subsets
int printSubSets(int num_of_bits, int num) {
   if (num >= 0) {
      printf("{ ");
      // Printint the subsets corresponding to
      // the binary representation of num.
      subset(num_of_bits - 1, num, num_of_bits);
      printf("}");
      // recursively calling the function to
      // print the next subset.
      printSubSets(num_of_bits, num - 1);
   }
   else
      return 0;
      return 1;
}
//main program
int main() {
   int n = 4;
   printSubSets(n, (int) (pow(2, n)) -1);
}

आउटपुट

{ 1 2 3 4 }{ 1 2 3 }{ 1 2 4 }{ 1 2 }{ 1 3 4 }{ 1 3 }{ 1 4 }{ 1 }{ 2 3 4 }{ 2 3 }{ 2 4 }{ 2 }{ 3 4 }{ 3 }{ 4 }{ }

  1. सी प्रोग्राम यह जांचने के लिए कि कोई सरणी पैलिंड्रोम है या रिकर्सन का उपयोग नहीं कर रही है

    एक सरणी गिरफ्तारी [एन] को देखते हुए जहां एन एक सरणी का कुछ आकार है, कार्य यह पता लगाना है कि सरणी पालिंड्रोम है या रिकर्सन का उपयोग नहीं कर रही है। पैलिंड्रोम एक अनुक्रम है जिसे पीछे और आगे की तरह पढ़ा जा सकता है, जैसे:मैडम, नमन, आदि। तो एक सरणी की जांच करने के लिए पैलिंड्रोम है या नहीं, इसलिए हम ए

  1. पायथन प्रोग्राम में किसी भी लूप का उपयोग किए बिना नंबर श्रृंखला प्रिंट करें

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे - समस्या कथन दो संख्या N और K को देखते हुए, हमारी समस्या N से किसी संख्या K को तब तक घटाना है जब तक कि संख्या (N) शून्य (0) से अधिक न हो जाए, एक बार जब N ऋणात्मक या शून्य हो जाए तो हम उसमें K जोड़ना शुरू कर देते हैं जब तक कि वह संख

  1. किसी भी लूप का उपयोग किए बिना प्रिंट नंबर श्रृंखला के लिए पायथन प्रोग्राम

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे - समस्या कथन - दो संख्या N और K को देखते हुए, हमारी समस्या N से किसी संख्या K को तब तक घटाना है जब तक कि संख्या (N) शून्य (0) से अधिक न हो जाए, एक बार जब N ऋणात्मक या शून्य हो जाए तो हम उसमें K को तब तक जोड़ना शुरू करते हैं जब तक क