【问题标题】:Codewars find the perfect squareCodewars 找到完美的正方形
【发布时间】:2021-06-12 10:30:05
【问题描述】:

我知道这是作弊,但我想知道答案。

我必须编写一个函数,它接受一个奇数,即两个连续完美平方之间的差,然后找到平方。

现在,我的问题是完美正方形的数量必须达到 1,000,000

如果代码执行时间超过12ms,系统将不接受。

重写代码以通过测试的正确方法是什么?

   function findSquare(input)
        {
        
        let perfectSquare = []
        let output
        
            for(let i = 0; i <= 1000000; i++){
                
                perfectSquare = [...perfectSquare, i*i]
            }
            
           for(let x = 0; x < perfectSquare.length; x++){

               if(perfectSquare[x+1] - perfectSquare[x] === input){

                   output = `${perfectSquare[x+1]}-${perfectSquare[x]}`

                   break
               }
           }

            return output
            
        }

        findSquare(9)

输出将是“25-16”

【问题讨论】:

  • 这个问题来自现场比赛吗?
  • 不,只是来自常规 kata
  • 连续完美正方形之间的差异很容易推导出来。您可以直接计算答案,无需搜索。

标签: javascript arrays loops


【解决方案1】:

让这两个数字是ab 这样b = a + 1 现在根据问题我们必须找到这样一个x 这样b * b - a * a = x

我们有

(b * b) - (a * a) = x

but b = a + 1, so replace b by a + 1

((a + 1) * (a + 1)) - (a * a) = x

Now we know that (A + B) * (A + B) = (A * A) + (2 * A * B) + (B * B)

((a + 1) * (a + 1)) - (a * a) = x

((a * a) + (2 * a * 1) + (1 * 1)) - (a * a) = x

(2 * a) + 1 = x

2a + 1 = x

a = (x - 1) / 2;  (x is odd (as mentiond in problem), so a is an integer

and b can be found as b = a + 1

所以我们需要的答案是(b * b), (a * a)

function solve(x) {
  let a = (x - 1) / 2;
  let b = a + 1;
  console.log(b * b, a * a)
}

solve(9);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 2016-12-26
    • 2016-08-26
    • 2011-11-19
    相关资源
    最近更新 更多