javascript - 问个算法题,已知QQ活跃天数,如何求等级
阿神
阿神 2017-04-11 11:15:30
0
11
1272

QQ活跃天数计算公式: (等级 + 4) * 等级 = 活跃天数
那么问题来了,已知活跃天数的情况下,如何逆推等级呢?
例如:活跃天数是100,(8 + 4) 8 = 96,(9 + 4) 9 = 117,100高于96但是低于117,所以是8级。
如何用程序去逆推出来?(数学弱,求小喷!)

阿神
阿神

闭关修行中......

membalas semua(11)
巴扎黑

求一下方程解,去掉负数那个;方程自己笔算。。

function aa(y){
    return  parseInt(Math.pow(y+4,1/2)-2)
 }
  console.log(aa(100))
刘奇

a方+4a=b

a方+4a+4=b+4

a=根号(b+4)-2

代码的话,参考crp205的回答。

小葫芦

一元二次方程

Peter_Zhu

我觉得这种算法,不需要逆推。而是将等级对应的天数列出来。然后通过区间的形式直接获取等级。公式归公式,但是逆推的时候不好推!如下为等级对应的天数(100级以内)

等级 天数
1 5
2 12
3 21
4 32
5 45
6 60
7 77
8 96
9 117
10 140
11 165
12 192
13 221
14 252
15 285
16 320
17 357
18 396
19 437
20 480
21 525
22 572
23 621
24 672
25 725
26 780
27 837
28 896
29 957
30 1020
31 1085
32 1152
33 1221
34 1292
35 1365
36 1440
37 1517
38 1596
39 1677
40 1760
41 1845
42 1932
43 2021
44 2112
45 2205
46 2300
47 2397
48 2496
49 2597
50 2700
51 2805
52 2912
53 3021
54 3132
55 3245
56 3360
57 3477
58 3596
59 3717
60 3840
61 3965
62 4092
63 4221
64 4352
65 4485
66 4620
67 4757
68 4896
69 5037
70 5180
71 5325
72 5472
73 5621
74 5772
75 5925
76 6080
77 6237
78 6396
79 6557
80 6720
81 6885
82 7052
83 7221
84 7392
85 7565
86 7740
87 7917
88 8096
89 8277
90 8460
91 8645
92 8832
93 9021
94 9212
95 9405
96 9600
97 9797
98 9996
99 10197
100 10400
洪涛

给个简单的版本。用的解一元二次方程的公式。

public class Solution {

    public static int getLevel(int days) {
        int i = 16 + 4 * days;
        double d = Math.floor(Math.sqrt(i));
        return (-4 + (int) d) >> 1;
    }

}
Peter_Zhu
//公式法:x=-b/2/a+Math.pow(Math.pow(b,2)-4*a*c,0.5)/2/a;

function getQQRank(day) {
    day = 0 - +day;
    let rank = Math.floor(-2 + Math.pow(16 - 4 * day, 0.5) / 2);
    return rank
}

console.log(getQQRank(96)) //8
console.log(getQQRank(100)) //8
console.log(getQQRank(117)) //9
阿神

这就是个拟合的问题嘛……

取前10个数,二阶拟合:

结果在左边那个框里,95%的置信区间。
p3太小了,可以直接省掉。
所以结果就是:
f(x) = x^2 + 4 * x

左手右手慢动作
以下的方法通过new Input(),在括号中传入当前活跃天数实例化,然后通过该实例的level方法取得当前等级。比如var le=new Input(100)
console.log(le.level())//打印输出8
js初学者,有错误希望大家更正,勿喷。
 var iGetANumber=0;
    function Input(val){//对象构造函数,传入活跃天数
        this.val=val;
    }
    Input.prototype.level=function(){//对象取得等级方法
        return getLevel(this.val)
    }
    function getLevel(input){
        iGetANumber
        if(iGetANumber*iGetANumber>=input+4){
            var  j=iGetANumber;
            iGetANumber=0
            return j-3
        }else{
            iGetANumber++;
            return getLevel(input)
        }
    }
大家讲道理

一元二次方程

Ty80

感觉到我Python被无视了,补一下:

def QQ(x):
    for n in range(1,101):
        if n*n + n*4 < x:
            continue
        else:
            return n
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!