QQ活跃天数计算公式: (等级 + 4) * 等级 = 活跃天数那么问题来了,已知活跃天数的情况下,如何逆推等级呢?例如:活跃天数是100,(8 + 4) 8 = 96,(9 + 4) 9 = 117,100高于96但是低于117,所以是8级。如何用程序去逆推出来?(数学弱,求小喷!)
闭关修行中......
求一下方程解,去掉负数那个;方程自己笔算。。
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的回答。
一元二次方程
我觉得这种算法,不需要逆推。而是将等级对应的天数列出来。然后通过区间的形式直接获取等级。公式归公式,但是逆推的时候不好推!如下为等级对应的天数(100级以内)
给个简单的版本。用的解一元二次方程的公式。
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; } }
//公式法: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
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) } }
感觉到我Python被无视了,补一下:
def QQ(x): for n in range(1,101): if n*n + n*4 < x: continue else: return n
求一下方程解,去掉负数那个;方程自己笔算。。
a方+4a=b
a方+4a+4=b+4
a=正根号(b+4)-2
代码的话,参考crp205的回答。
一元二次方程
我觉得这种算法,不需要逆推。而是将等级对应的天数列出来。然后通过区间的形式直接获取等级。公式归公式,但是逆推的时候不好推!如下为等级对应的天数(100级以内)
给个简单的版本。用的解一元二次方程的公式。
这就是个
拟合
的问题嘛……取前10个数,二阶拟合:
结果在左边那个框里,95%的置信区间。
p3太小了,可以直接省掉。
所以结果就是:
f(x) = x^2 + 4 * x
一元二次方程
感觉到我Python被无视了,补一下: