কম্পিউটার

পাইথনের সিঁড়ি ব্যবহার করে আমরা পরের তলায় পৌঁছাতে পারি এমন সংখ্যক উপায় খুঁজে বের করার প্রোগ্রাম


ধরুন N ধাপ সহ একটি সিঁড়ির কেস আছে। কেউ হয় ধাপে ধাপে যেতে পারে, অথবা প্রতিটি ধাপে, একজন সর্বাধিক N ধাপে লাফ দিতে পারে। আমরা উপরের তলায় যেতে পারি এমন উপায় খুঁজে বের করতে হবে। N এর মান বড় হতে পারে আমরা শুধুমাত্র প্রথম এবং শেষ K সংখ্যায় আগ্রহী।

সুতরাং, যদি ইনপুটটি N =10 k =2 এর মত হয়, তাহলে আউটপুট হবে 63 কারণ এখানে 10টি ধাপ আছে, যদি S সংখ্যার উপায় থাকে যার মাধ্যমে আমরা শীর্ষে যেতে পারি, তাহলে Sকে wxyz ফর্মের বিবেচনা করুন। তাই, wx + yz এর সারাংশ হল 63।

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

  • N :=N - 1
  • c :=2 * (k + log(N);base10) এর সিলিং
  • e :=N, b :=2, s :=1
  • যখন e> 0, do
    • যদি e বিজোড় হয়, তাহলে
      • s :=(s*b) এর প্রথম p-c ডিজিটের সংখ্যা যেখানে p হল s*b-এর সংখ্যার সংখ্যা
    • e :=e/2 এর ফ্লোর
    • b :=(b*b) এর প্রথম p-c অঙ্কের সংখ্যা যেখানে p হল b*b-এর সংখ্যার সংখ্যা
  • s :=s-এর প্রথম p - k অঙ্কের সংখ্যা, যেখানে p হল s-এ অঙ্কের সংখ্যা
  • r :=s + (2^N) মোড 10^k
  • রিটার্ন r

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

from math import log10,ceil

def solve(N,k):
   N -= 1
   c = 2*ceil(k + log10(N))
   e = N
   b = 2
   s = 1
   while e > 0:
      if e % 2 == 1:
         s = int(str(s*b)[:c])
      e //=2
      b = int(str(b*b)[:c])
   s = str(s)[:k]
   r = int(s) + pow(2, N, 10**k)
   return r

N = 10
k = 2
print(solve(N,k))

ইনপুট

10, 2

আউটপুট

63

  1. পাইথনে n স্বতন্ত্র নোড ব্যবহার করে সম্ভাব্য BST গুলির সংখ্যা খুঁজে বের করার প্রোগ্রাম তৈরি করা যেতে পারে

  2. পাইথন ব্যবহার করে সমস্ত নোডে পৌঁছানোর জন্য ন্যূনতম সংখ্যক শীর্ষবিন্দু খুঁজে বের করার প্রোগ্রাম

  3. পাইথন ব্যবহার করে একই লেবেল সহ সাব-ট্রিতে নোডের সংখ্যা খুঁজে বের করার প্রোগ্রাম

  4. পাইথন প্রোগ্রাম একটি তালিকার ক্ষুদ্রতম সংখ্যা খুঁজে বের করতে