算法面试题-牛客网数组变换

题目:

解析:

首先简单的情况是,两个数,判断能否通过题目中的规则,每次乘以2,最后能否相等,这个问题其实很简单,设两个数为a和b,则有:

a*2n=b*2m

化简后得到:

a/b=2m-n

求对数:

log2(a/b)=m-n

当条件成立时,n和m均为正数,也就是m-n也为整数。

当数组中有多于两个数时,要判断整个数组是否符合,只需要判断相邻两个数是否符合规则即可,也就是只需要遍历一次,从两个数迁移到多个数的情况是一样的。

代码:

 1 import math
 2 
 3 
 4 def log2(num):
 5     return math.log(num, 2)
 6 
 7 
 8 def isInt(n):
 9     return n - int(n) == 0
10 
11 
12 while True:
13     try:
14         n = int(raw_input())
15         ns = map(float, raw_input().split(' '))
16         for i in range(n-1):
17             if not isInt(log2(ns[i] / ns[i+1])):
18                 print 'NO'
19                 break
20         else:
21             print 'YES'
22     except EOFError:
23         break
原文地址:https://www.cnblogs.com/Fndroid/p/6936535.html