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

Pythonで数値の複合被加数の最大数を見つける


指定された数Nがあり、範囲(1 <=N <=10 ^ 9)の場合、Nを可能な最大数の複合被加数の合計として表す必要があります。この最大数を返します。それ以外の場合、分割が見つからない場合は、-1を返します。

したがって、入力が16の場合、出力は4になります。16は4 + 4 + 4+4または8+8と書くことができますが、(4 + 4 + 4 + 4)には最大の被加数があります。

>

これを解決するには、次の手順に従います-

  • max_val:=16

  • 関数pre_calc()を定義します。これには時間がかかります

  • table:=サイズmax_valのリスト、各位置に-1を格納

  • table [0]:=0

  • v:=[4、6、9]

  • 1からmax_valの範囲のiの場合、1ずつ増やします。

    • 0から2の範囲のkの場合、実行

      • j:=v [k]

      • i> =jであり、table [i --j]が-1でない場合、

        • table [i]:=table [i]の最大値、table [i --j] + 1

  • リターンテーブル

  • 関数max_summ()を定義します。これはテーブルを取ります、n

  • n

    • リターンテーブル[n]

  • それ以外の場合

    • t:=整数((n-max_val)/ 4)+ 1

    • t+テーブルを返す[n-4* t]

  • メインの方法から、次のようにします-

  • テーブル:=pre_calc()

  • max_summ(table、n)

    を表示します

理解を深めるために、次の実装を見てみましょう-

global max_val
max_val = 16
def pre_calc():
   table = [-1 for i in range(max_val)]
   table[0] = 0
   v = [4, 6, 9]
   for i in range(1, max_val, 1):
      for k in range(3):
         j = v[k]
         if (i >= j and table[i - j] != -1):
            table[i] = max(table[i], table[i - j] + 1)
   return table
def max_summ(table, n):
   if (n < max_val):
      return table[n]
   else:
      t = int((n - max_val) / 4)+ 1
      return t + table[n - 4 * t]
n = 16
table = pre_calc()
print(max_summ(table, n))

入力

16

出力

4

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

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

  2. Pythonを使用して数値の階乗を見つける方法は?

    数値の階乗は、1とそれ自体の間のすべての整数の積です。与えられた数の階乗を見つけるために、1からそれ自体までの範囲でforループを形成しましょう。 range()関数は停止値を除外することに注意してください。したがって、停止値は入力数より1大きい値にする必要があります。 範囲内の各数値は、1に初期化される変数fで累積的に乗算されます 例 num=int(input('enter a number')) f=1 for i in range(1,num+1):   f=f*i print ('factorial of', num, '='