zoukankan      html  css  js  c++  java
  • 算法面试题-牛客网数组变换

    题目:

    解析:

    首先简单的情况是,两个数,判断能否通过题目中的规则,每次乘以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
  • 相关阅读:
    Windbg DUMP
    NET媒体文件操作组件TagLib
    NET Framework、.NET Core、Xamarin
    面向切面编程
    微服务
    NET Core
    Yeoman generator
    Service Fabric
    Vue.JS 2.x
    CoreCLR
  • 原文地址:https://www.cnblogs.com/Fndroid/p/6936535.html
Copyright © 2011-2022 走看看