JS计算线性得分的问题
我希望根据排名,计算出得分。首先我们有两组变量,得分范围arrScoreRange,排名范围arrRankRange。
即当传入排名为1时,返回得100分,传入排名为31时,返回得0分,其他排名线性得分。
数学基础差,不知道应该这么实现,请各位大佬指教,感谢。
const arrScoreRange = ,
arrRankRange = ; function calculateScore(rank) {
if (rank === 1) {
return 100;
} else if (rank > 1 && rank <= 30) {
return 100 - (rank - 1) * 3.2258;
} else {
return 0;
}
}
document.write(calculateScore(1));
document.write("<br>");
document.write(calculateScore(2));
document.write("<br>");
document.write(calculateScore(10));
document.write("<br>");
document.write(calculateScore(30));
document.write("<br>");
document.write(calculateScore(31));
document.write("<br>");
document.write(calculateScore(32));
chatGPT应该可以帮助你解决问题。 把得分数组按分数从高到低排序,然后直接返回array[排名] zach14c 发表于 2023-2-17 09:32
function calculateScore(rank) {
if (rank === 1) {
return 100;
...
测试功能实现,请教一下3.2258是什么意思?感谢 zach14c 发表于 2023-2-17 09:32
function calculateScore(rank) {
if (rank === 1) {
return 100;
...
这样好像写死了,如果范围不是1至31,而是1至16,就不能正确计算得分了。 本帖最后由 cqwcns 于 2023-2-17 10:07 编辑
自己根据楼上的代码,改了一下,加了一共最大排名参数maxRank,就解决问题了。
function calculateScore(rank, maxRank = 16) {
return Math.max(100 - (rank - 1) * (100 / (maxRank - 1)), 0);
}
感谢各位指教。 cqwcns 发表于 2023-2-17 09:55
这样好像写死了,如果范围不是1至31,而是1至16,就不能正确计算得分了。
线性插值
https://wiki.mbalib.com/w/images/math/3/6/d/36d5fe6bef62d0313a73616f0a5fd69d.png zach14c 发表于 2023-2-17 10:03
线性插值
这样好像就解决了,感谢大佬。
function calculateScore(rank, maxRank = 16) {
return Math.max(100 - (rank - 1) * (100 / (maxRank - 1)), 0);
}
页:
[1]