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

配列ペアがkで割り切れるか、Pythonを使用していないかを確認するプログラム


numsという配列があり、この配列には偶数の要素が含まれ、別の値kがあるとします。各ペアの合計がkで割り切れるように、numを正確にn/2ペアに分割する必要があります。可能であればtrueを返し、そうでない場合はfalseを返します。

したがって、入力がnums =[9,5,3,4,7,10,20,8] k =3のような場合、(9,3)、(5)のようなペアを作成できるため、出力はTrueになります。 、7)、(4,20)、(8,10)、すべてのペアの合計は3で割り切れます。

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

  • dp:=新しいリスト

  • count:=0

  • numsのxごとに、実行します

    • t:=k-(x mod k)

    • tがkと同じ場合、

      • count:=count + 1

    • それ以外の場合

      • dpの最後にtを挿入します

  • count mod 2が0と同じでない場合、

    • Falseを返す

  • リストを並べ替えるdp

  • 低:=0

  • 高:=dpのサイズ-1

  • 低<高、実行

    • dp [low] + dp [high]がkと同じでない場合、

      • Falseを返す

    • 低:=低+ 1

    • 高:=高-1

  • Trueを返す

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

def solve(nums, k):
   dp=[]
   count=0
   for x in nums:
      t=k-(x % k)
      if t == k:
         count+=1
      else:
         dp.append(t)
   if count % 2 != 0:
      return False
   dp.sort()
   low = 0
   high = len(dp)-1
   while low < high:
      if dp[low] + dp[high] != k:
         return False
      low += 1
      high -= 1
   return True
nums = [9,5,3,4,7,10,20,8]
k = 3
print(solve(nums, k))

入力

[9,5,3,4,7,10,20,8], 3

出力

True

  1. ポイントをチェックするプログラムがPythonで凸包を形成しているかどうか

    ポリゴンの外側の点が時計回りにあるとします。これらの点が凸包を形成しているかどうかを確認する必要があります。 この図から、3つの連続するポイントごとに内角が180°以下であることが明らかです。したがって、すべての角度が180°以下の場合、ポリゴンは凸包になります。 したがって、入力がpoints =[(3,4)、(4,7)、(7,8)、(11,6)、(12,3)、(10,1)、(5,2 )]の場合、出力はTrueになります。 これを解決するには、次の手順に従います- n:=ポイントのサイズ 0からポイントのサイズまでの範囲のiについては、 1の場合はpoints[i-2]、

  2. 配列内のすべての桁を使用して3つの数値で割り切れる可能性があるかどうかを確認するPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 整数の配列入力が与えられた場合、3で割り切れるように、これらの数値で使用可能なすべての数字を使用して整数を作成できるかどうかを確認する必要があります。 ここでは、整数の配列と配列の長さという2つの引数を取る関数を生成します。 以下に示す実装は、精神数学の概念に基づいて機能します。ここでは、桁の合計が3で割り切れる場合、数値は3で割り切れることがわかります。 次に、以下の実装を見てみましょう- 例 def isPossibleToMakeDivisible(arr, n): &nbs