Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの階段を使用して次の階に到達できる方法の数を見つけるためのプログラム


N段の階段があるとします。ステップバイステップで進むことも、各ステップで最大Nステップのジャンプを行うこともできます。最上階に行く方法をいくつも見つけなければなりません。 N値は大きい可能性があり、多数のウェイの最初と最後のK桁にのみ関心があります。

したがって、入力がN =10 k =2の場合、10のステップがあるため、出力は63になります。トップに移動できる方法が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:=最初のp-sのk桁の数字。ここで、pはsの桁数です
  • r:=s +(2 ^ N)mod 10 ^ k
  • return 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. Pythonを使用して、同じラベルを持つサブツリー内のノードの数を見つけるプログラム

    ノードに0からn-1までの番号が付けられたn個のノードを持つルート化された一般ツリーがあるとします。各ノードには、小文字の英字のラベルがあります。ラベルはlabels配列の入力として指定されます。ここで、lables[i]にはi番目のノードのラベルが含まれています。ツリーはエッジリストで表され、各エッジeには[u、v]があり、uは親、vは子を表します。サイズnの配列Aを見つける必要があります。これは、iと同じラベルを持つi番目のノードのサブツリー内のノードの数を表します したがって、入力が次のような場合 ここで、n =5およびlabel=“ ccaca” ルートには同じラベルの子

  2. リスト内の最小数を見つけるPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −リストが表示されます。リストで利用可能な最小の番号を表示する必要があります ここでは、リストを並べ替えて最小の要素を取得するか、組み込みのmin()関数を使用して最小の要素を取得できます。 次に、以下の実装の概念を観察しましょう- 例 list1 = [101, 120, 104, 145, 99] # sorting using built-in function list1.sort() print("Smallest element is:", list1[0]) 出力 Smal