কম্পিউটার

পাইথনে আনাড়ি ফ্যাক্টরিয়াল


আমরা জানি যে একটি ধনাত্মক পূর্ণসংখ্যা n এর ফ্যাক্টরিয়াল হল n এর থেকে কম বা সমান সমস্ত ধনাত্মক পূর্ণসংখ্যার গুণফল। তাই ফ্যাক্টোরিয়াল(10) =10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1। আমরা একটি আনাড়ি ফ্যাক্টরিয়াল খুঁজে বের করার চেষ্টা করব:পূর্ণসংখ্যাগুলিকে হ্রাসকারী ক্রমে ব্যবহার করে, আমরা একটির জন্য গুণিতিক ক্রিয়াকলাপগুলিকে অদলবদল করি ক্রিয়াকলাপের নির্দিষ্ট ঘূর্ণন:এই ক্রমে গুন (*), ভাগ (/), যোগ (+) এবং বিয়োগ (-) করুন।

আনাড়ি ফ্যাক্টরিয়াল হল clumsy(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

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • অপারেশন অ্যারে সংজ্ঞায়িত করুন, এবং অপারেটর সংরক্ষন করুন [* / + -], একটি খালি স্ট্যাক তৈরি করুন এবং স্ট্যাকের মধ্যে N পুশ করুন।
  • সূচক :=0
  • N 1 দ্বারা হ্রাস করুন
  • যদিও N 0 নয়:
    • যদি অপারেশন[সূচী] =*, তারপর
      • স্ট্যাক টপ এলিমেন্ট যদি>=0 হয়, তাহলে স্ট্যাক টপ এলিমেন্টকে top_element হিসেবে আপডেট করুন :=N * top_element
      • অন্যথায় শীর্ষ উপাদান স্ট্যাক :=-1 * |N * স্ট্যাক শীর্ষ উপাদান |
    • অন্যথায় যদি অপারেশন[সূচী] / হয়, তাহলে
      • স্ট্যাক টপ এলিমেন্ট যদি>=0 হয়, তাহলে স্ট্যাক টপ এলিমেন্ট আপডেট করুন top_element :=top_element / N
      • অন্যথায় স্ট্যাক শীর্ষ উপাদান :=-1 * |স্ট্যাক শীর্ষ উপাদান / N|
    • অন্যথায় যদি অপারেশন[সূচী] + হয়, তাহলে
      • স্ট্যাকে 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. একটি সংখ্যার ফ্যাক্টোরিয়ালের জন্য পাইথন প্রোগ্রাম

  2. issuperset() পাইথনে

  3. পাইথনে একটি পুনরাবৃত্ত ফাংশন কিভাবে লিখবেন?

  4. পাইথনে পুনরাবৃত্তি এবং ব্যাকট্র্যাকিং কি?