吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 676|回复: 8
收起左侧

[求助] JS计算线性得分的问题

[复制链接]
cqwcns 发表于 2023-2-17 09:17
我希望根据排名,计算出得分。
首先我们有两组变量,得分范围arrScoreRange,排名范围arrRankRange。

即当传入排名为1时,返回得100分,传入排名为31时,返回得0分,其他排名线性得分。

数学基础差,不知道应该这么实现,请各位大佬指教,感谢。


[JavaScript] 纯文本查看 复制代码
                const arrScoreRange = [100, 0],
                    arrRankRange = [1, 31];

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

zach14c 发表于 2023-2-17 09:32
[JavaScript] 纯文本查看 复制代码
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));

免费评分

参与人数 1吾爱币 +1 收起 理由
cqwcns + 1 谢谢@Thanks!

查看全部评分

sunsjw 发表于 2023-2-17 09:38
Pwaerm 发表于 2023-2-17 09:39
把得分数组按分数从高到低排序,然后直接返回array[排名]
 楼主| cqwcns 发表于 2023-2-17 09:52
zach14c 发表于 2023-2-17 09:32
[mw_shl_code=javascript,false]function calculateScore(rank) {
  if (rank === 1) {
    return 100;
...

测试功能实现,请教一下3.2258是什么意思?感谢
 楼主| cqwcns 发表于 2023-2-17 09:55
zach14c 发表于 2023-2-17 09:32
[mw_shl_code=javascript,false]function calculateScore(rank) {
  if (rank === 1) {
    return 100;
...

这样好像写死了,如果范围不是1至31,而是1至16,就不能正确计算得分了。
 楼主| cqwcns 发表于 2023-2-17 10:03
本帖最后由 cqwcns 于 2023-2-17 10:07 编辑

自己根据楼上的代码,改了一下,加了一共最大排名参数maxRank,就解决问题了。

[JavaScript] 纯文本查看 复制代码
                function calculateScore(rank, maxRank = 16) {
                    return Math.max(100 - (rank - 1) * (100 / (maxRank - 1)), 0);
                }


感谢各位指教。
zach14c 发表于 2023-2-17 10:03
cqwcns 发表于 2023-2-17 09:55
这样好像写死了,如果范围不是1至31,而是1至16,就不能正确计算得分了。

线性插值

免费评分

参与人数 1热心值 +1 收起 理由
cqwcns + 1 谢谢@Thanks!

查看全部评分

 楼主| cqwcns 发表于 2023-2-17 10:08

这样好像就解决了,感谢大佬。

function calculateScore(rank, maxRank = 16) {
    return Math.max(100 - (rank - 1) * (100 / (maxRank - 1)), 0);
}
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 02:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表