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

题目:

解析:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值