কম্পিউটার টিউটোরিয়াল

পাইথনে ক্লামজি ফ্যাক্টোরিয়াল বের করুন

ফ্যাক্টোরিয়াল জানি: n-এর ফ্যাক্টোরিয়াল হলো n থেকে ১ পর্যন্ত সব পজিটিভ ইন্টিজারের গুণফল। ক্লামজি ফ্যাক্টোরিয়ালে গুণ করার অপারেশনগুলো একটি ফিক্সড রোটেশন দ্বারা রিপ্লেস করা হয়: গুণ (*), ভাগ (/), যোগ (+), বিয়োগ (-) - এই ক্রমে।

clumsy(10) = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1। অপারেশনগুলোর অর্ডার অফ অপারেশন মেনে চলে: আগে গুণ এবং ভাগ (বাম থেকে ডান), তারপর যোগ এবং বিয়োগ। ভাগটি ফ্লোর ডিভিশন।

ইনপুট 10 হলে রেজাল্ট 12।

সমাধানের ধাপসমূহ

  • operations অ্যারে: ["*", "/", "+", "-"], খালি স্ট্যাক, N পুশ করুন
  • index := 0, N := N - 1
  • যখন N != 0:
    • যদি operations[index] == "*": স্ট্যাক টপ আপডেট করুন (সাইন অনুযায়ী)
    • অথবা "/": স্ট্যাক টপ আপডেট করুন (ফ্লোর ডিভিশন)
    • অথবা "+": N পুশ করুন
    • অন্যথায়: -N পুশ করুন
    • index = (index + 1) % 4, N--
  • স্ট্যাকের সব এলিমেন্টের যোগফল রিটার্ন

উদাহরণ

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. পাইথনে একটি সংখ্যার ফ্যাক্টোরিয়াল প্রোগ্রাম

  2. পাইথনে issuperset() ফাংশন

  3. পাইথনে রিকারসিভ ফাংশন লেখার নিয়ম কী?

  4. পাইথনে রিকার্শন এবং ব্যাকট্র্যাকিং কী?