蓝桥杯—数字诗意

21 阅读1分钟

题目解释

这道题主要是考察一个数是否能被2-n个连续的数字相加得到,参考了示例代码之后发现

只有是2的次幂的数字才不会被连续的数字相加得到

为了更快的找到2的n次幂,可以通过下面的性质判定

过判断 num[i] & (num[i] - 1) 是否等于 0,就可以判断 num[i] 是否是 2 的幂次方

于是完成代码:

n = int(input())
a = list(map(int,input().split()))
cnt=0
for i in range(n):
    if(a[i] & (a[i]-1))==0:
        cnt+=1
print(cnt)