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

पायथन में अनाड़ी फैक्टोरियल

जैसा कि हम जानते हैं कि एक धनात्मक पूर्णांक n का भाज्य n से कम या उसके बराबर सभी धनात्मक पूर्णांकों का गुणनफल होता है। तो भाज्य(10) =10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1। संचालन का निश्चित रोटेशन:इस क्रम में गुणा (*), विभाजित (/), (+) और घटाना (-) करें।

अनाड़ी भाज्य अनाड़ी(10) =10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1 की तरह है। हालाँकि, ये ऑपरेशन अभी भी अंकगणित के संचालन के सामान्य क्रम का उपयोग करके लागू होते हैं:हम सभी गुणन करते हैं और किसी भी जोड़ या घटाव चरणों से पहले विभाजन चरण, और गुणा और भाग चरणों को बाएं से दाएं संसाधित किया जाता है। हम जिस विभाजन का उपयोग कर रहे हैं वह फर्श विभाजन है जैसे कि 10 * 9/8 बराबर 11. यह गारंटी देता है कि परिणाम एक पूर्णांक है।

तो उदाहरण के लिए, यदि इनपुट 10 है, तो परिणाम 12 होगा, जैसे 12 =10 * 9/8 + 7 - 6 * 5/4 + 3 - 2 * 1

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • ऑपरेशन ऐरे को परिभाषित करें, और ऑपरेटरों को स्टोर करें [* / + -], एक खाली स्टैक बनाएं, और एन को स्टैक में पुश करें।
  • सूचकांक:=0
  • N को 1 से घटाएं
  • जबकि N 0 नहीं है:
    • अगर ऑपरेशन [इंडेक्स] =*, तो
      • यदि स्टैक टॉप एलिमेंट>=0 है, तो स्टैक टॉप एलिमेंट को top_element के रूप में अपडेट करें:=N * top_element
      • अन्यथा स्टैक टॉप एलिमेंट :=-1 * |N * स्टैक टॉप एलिमेंट|
    • अन्यथा यदि ऑपरेशन [इंडेक्स] / है, तो
      • यदि स्टैक टॉप एलिमेंट>=0 है, तो स्टैक टॉप एलिमेंट को top_element के रूप में अपडेट करें:=top_element / N
      • अन्यथा स्टैक टॉप एलिमेंट :=-1 * |स्टैक टॉप एलिमेंट / N|
    • अन्यथा यदि ऑपरेशन [इंडेक्स] + है, तो
      • एन को स्टैक में डालें
    • अन्यथा स्टैक में (-1 * N) डालें
    • सूचकांक:=(सूचकांक + 1) संचालन सरणी की आधुनिक लंबाई
    • N को 1 से घटाएं
  • स्टैक तत्वों का रिटर्न योग।

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

उदाहरण

class Solution(object):
   def clumsy(self, N):
      operations = ["*","/","+","-"]
      stack = []
      index = 0
      stack.append(N)
      N-=1
      while N:
         if operations[index] == "*":
            if stack[-1]>=0:
               stack[-1] *=N
            else:
               stack[-1] = -1*(abs(stack[-1])*N)
         elif operations[index] == "/":
            if stack[-1]>=0:
               stack[-1] //=N
            else:
               stack[-1] = -1*(abs(stack[-1])//N)
         elif operations[index] == "+":
            stack.append(N)
         else:
            stack.append(-1*N)
         index = (index+1) % len(operations)
         N-=1
      return sum(stack)
ob = Solution()
print(ob.clumsy(10))

इनपुट

10

आउटपुट

12

  1. एक संख्या के भाज्य के लिए पायथन कार्यक्रम

    इस लेख में, हम दिए गए समस्या कथन को हल करने के लिए समाधान और दृष्टिकोण के बारे में जानेंगे। समस्या कथन −हमारा कार्य n के भाज्य की गणना करना। एक गैर-ऋणात्मक संख्या का भाज्य − . द्वारा दिया जाता है n! = n*n-1*n-2*n-3*n-4*.................*3*2*1 हमारे पास समस्या के दो संभावित समाधान हैं पुनरावर्ती

  1. issuperset () पायथन में

    इस लेख में, हम पायथन में issuperset() और विभिन्न क्षेत्रों में इसके कार्यान्वयन के बारे में जानेंगे। यह विधि बूलियन ट्रू लौटाती है यदि एक सेट बी के सभी तत्वों में सभी तत्व सेट ए होते हैं जो एक तर्क के रूप में पारित होते हैं और यदि ए के सभी तत्व बी में मौजूद नहीं होते हैं तो झूठा रिटर्न देता है। इस

  1. पायथन में रिकर्सन और बैकट्रैकिंग क्या है?

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