题目:

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

解析:

首先简单的情况是,两个数,判断能否通过题目中的规则,每次乘以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

 

相关文章:

  • 2021-05-08
  • 2021-06-04
  • 2022-12-23
  • 2021-05-19
  • 2022-01-25
  • 2021-07-10
  • 2022-02-07
  • 2022-01-05
猜你喜欢
  • 2021-11-29
  • 2021-04-03
  • 2021-10-02
  • 2021-10-01
  • 2021-09-17
  • 2021-12-02
  • 2022-01-22
相关资源
相似解决方案