2016-11-29 3 views
0

が必要です:私たちがしなければA.は内の配列Aの任意のサブセットがあり、アレイのすべての要素を考慮する私のように与えられた問題持っている。このため、ロジック(論理積リスト要素は二つの電力を得るために)

をそのサブセットの出力は2の累乗になるはずです(例:1,2,4,8,16など)。

は観察した後、私はこのようにそれを試してみました:

s = list(map(int,raw_input().split())) 
x = [ True for x in s if x | (x+1) == (x+1)*2] 
if len(x) > 0: 
    print "YES" 
else: 
    print "NO" 

誰かがこれ以外のロジックを提案しますか?

+1

いくつかの例については、私は/ o – Aaron

+0

クイズの問題のようです。あなたはここから論理を得ることができます:http://stackoverflow.com/questions/35990794/subset-of-array-a-in-which-if-we-do-and-of-all-elements-of-that- subset-then-outp – MYGz

答えて

2

itertools.combinationsを使用して、入力セットから要素のすべての組み合わせを取得します。

from itertools import combinations 

def is_power_two(n): 
    if n==1: 
     return True 
    if n<1: 
     return False 
    return is_power_two(n/2) 

def do_they_and(s): 
    for i in range(2, len(s)+1): 
     for j in combinations(s, i): 
      total = 0 
      for n in j: 
       total &= n 
      if is_power_two(total): 
       return True 

これはおそらくプログラムする最も簡単な方法ですが、効率的な観点から見れば、おそらく動的なプログラミングの方法でしょう。

+1

これはPython 2では機能しません。 'from __future__ import division'を使用して修正してください – Aaron

関連する問題