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

Pythonで整数の配列のすべての数とXORするときに最小の合計を与える数を見つけます


配列Aがあるとすると、(A [0] XOR X)+(A [1] XOR X)+…+ A [n – 1]XORXが可能な限り最小になるような数Xを見つける必要があります。

したがって、入力が[3、4、5、6、7]の場合、出力はX =7、Sum =10

になります。

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

  • 関数search_res()を定義します。これには時間がかかります、n
  • 要素:=arr [0]
  • 0からarrのサイズまでの範囲のiについては、
    • arr [i]>要素の場合、
      • 要素:=arr [i]
  • p:=(要素の底2の対数)+1の整数
  • X:=0
  • 0からpの範囲のiについては、
    • cnt:=0
    • 0からnの範囲のjについては、
      • arr [j] AND(2 ^ i)がゼロ以外の場合、
        • cnt:=cnt + 1
    • cnt>(n / 2)の整数部分がゼロ以外の場合、
      • X:=X +(2 ^ i)
  • 合計:=0
  • 0からnの範囲のiについては、
    • sum:=sum +(X XOR arr [i])
  • Xと合計を返す

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

from math import log2
def search_res(arr, n):
   element = arr[0]
   for i in range(len(arr)):
      if(arr[i] > element):
         element = arr[i]
   p = int(log2(element)) + 1
   X = 0
   for i in range(p):
      cnt = 0
      for j in range(n):
         if (arr[j] & (1 << i)):
            cnt += 1
      if (cnt > int(n / 2)):
         X += 1 << i
   sum = 0
   for i in range(n):
      sum += (X ^ arr[i])
   print("X =", X, ", Sum =", sum)
arr = [3, 4, 5, 6, 7]
n = len(arr)
search_res(arr, n)

入力

[3, 4, 5, 6, 7]

出力

X = 7 , Sum = 10

  1. 配列の合計を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力として配列が与えられた場合、与えられた配列の合計を計算する必要があります。 ここでは、ブルートフォースアプローチに従うことができます。つまり、リストをトラバースし、各要素を空の合計変数に追加します。最後に、合計の値を表示します。 以下で説明するように、組み込みの合計関数を使用して別のアプローチを実行することもできます。 例 # main arr = [1,2,3,4,5] ans = sum(arr,n) print ('Sum of the array is '

  2. 数の因子の最小合計を見つけるためのPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します- 問題の説明 入力された数値を指定して、指定された数値の因子の最小合計を求めます。 ここでは、すべての因子とそれに対応する合計を計算し、それらの中から最小値を見つけます。 したがって、数の積の最小合計を見つけるために、積の素因数の合計を見つけます。 これが問題の反復実装です- 例 #iterative approach def findMinSum(num):    sum_ = 0    # Find factors of number and add to the sum