这个数学问题怎么快速解决

一颗从上到下的圣诞树 第一层有1 第二层有2 3 第三层有4 5 6……现在输进去一个数求它是第几层

阅读 3.8k
9 个回答
num为要输入的数字
i=1
sum=0
do{
    sum+=i;
    i++;
}while(sum>num)
输出i-1
function jud(num){
    var i=0;
    while(true){
        if(num>i*(i-1)/2&&(num<=i*(i+1)/2)){
            return i
        }
        i++;
    }
}

好简单的题:

// C
#include <math.h>
int findFloor(int num)
{
    return (int)(sqrt(8*num+1)-1)/2+1);
}
// JS
function findFloor(num)
{
    return Math.ceil((Math.sqrt(8*num+1)-1)/2);
}

直接用循环是没问题的;
如知道输入输出范围的话,也可以用二分。

仔细想想,其实这道题也可以一步就求出来的

设输入数字为n,那么当前层数x为:

x = ceil((sqrt(8 * n + 1) - 1) / 2)
新手上路,请多包涵

思路大概就是这样层数1+2+3+..n就是n层最后一个数字
1+2+3+..+n-1就是第n-1层 把这两个数和你输入的数字比较一下

你没发现每一层的第一个数字就是一个差递增的数列吗?然后输入的这个数字在数列n与n-1层之间,这个n不就是你要的层数?

数字num
所求行数 n = ceil(sqrt(num));

min [n(n+1)/2] >= targetNum
function loopDeep(n,number) {
    var result = [];

    function getNum(index) {
        var s = 0;
        for (var j = 0; j <= index; j++) {
            s += j;
        }
        return s;
    }
    for (var i = 1; i < n; i++) {
    if(getNum(i)>number){
      break;
    }
        result.push(getNum(i))
    };
    return result

}

function getDeep(number){
  var array = loopDeep(1000000,number);
  return number > array[array.length-1] ?  array.length+1 :array.length
}

console.log("所在层数为: " + getDeep(212313131) )
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进