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

Pythonで合計値がkで割り切れるN個の自然数からペアの数を見つけるプログラム


数nと別の値kがあるとすると、最初のN個の自然数を持つ配列Aがあるとすると、Aから要素A[i]とA[j]のペアの総数を見つける必要があります。

したがって、入力がn =10 k =4の場合、合計が4で割り切れる10のペアがあるため、出力は10になります。[(1,3)、(1,7)、(2,6) 、(2,10)、(3,5)、(3,9)、(4,8)、(5,7)、(6,10)、(7,9)]

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

  • m:=(n / k)のフロア、r:=n mod k
  • b:=新しい地図
  • 0からk-1の範囲のiの場合、do
    • b [i]:=m
  • m * k + 1からnの範囲のiについては、
    • j:=i mod k
    • b [j]:=b [j] + 1
  • c:=0
  • 0からkの範囲のiについては、
    • i1:=i
    • i2:=(k-i)mod k
    • i1がi2と同じ場合、
      • c:=c + b [i] *(b [i] -1)
    • それ以外の場合、
      • c:=c + b [i1] *(b [i2])
  • c/2のリターンフロア

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

def solve(n, k):
   m = n // k
   r = n % k

   b = {}
   for i in range(k) :
      b[i] = m
   for i in range(m*k+1, n+1) :
      j = i % k
      b[j] = b[j] + 1

   c = 0
   for i in range(k) :
      i1 = i
      i2 = (k - i) % k
      if i1 == i2 :
         c = c + b[i] * (b[i]-1)
      else :
         c = c + b[i1] * (b[i2])
   return c//2

n = 10
k = 4
print(solve(n, k))

入力

4, 27

出力

10

  1. Pythonのサブツリーのノード値の合計から最小値を見つけるプログラム

    すべてのノードに1からnまでの番号が付けられたツリーがあるとします。各ノードには整数値が含まれています。ここで、ツリーからエッジを削除する場合、2つのサブツリーのノード値の合計の差を最小限に抑える必要があります。そのようなサブツリー間の最小の違いを見つけて返す必要があります。ツリーはエッジのコレクションとして提供され、ノードの値も提供されます。 したがって、入力がn =6の場合、edge_list =[[1、2]、[1、3]、[2、4]、[3、5]、[3、6]]、values =[15、 25、15、55、15、65]の場合、出力は0になります。 エッジ(1,2)を削除すると、重みの

  2. Pythonプログラムで数の偶数因子の合計を見つける

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −数値が与えられているので、数値のすべての偶数因子の合計を表示する必要があります。 アプローチ 数値が奇数かどうかを確認し、偶数の因子がないため、0を返します。 数が偶数の場合、計算を実行します。 20を除く他のすべての項は、偶数の因数の合計を生成するために乗算されます。 偶数因子のすべての奇数を削除するために、1である20を無視します。このステップの後、偶数因子のみを取得しました。 2は私たちが利用できる唯一の素数であることに注意してください。 次に、以下の実装を見てみましょう- 例 # math