【发布时间】:2021-04-10 18:18:16
【问题描述】:
遗憾的是,我需要某种我自己无法弄清楚的算法。
我最大的问题是我没有很好的方式来描述这个问题...:/
我会这样尝试:
假设您有一个赛车游戏,每个人都可以在赛道或地图上尝试成为最快的。每张地图总价值 100 点。如果有人在一段时间内完成了一张地图,他会在数据库中获得一条记录。如果玩家是第一个也是唯一一个完成此地图的玩家,他将获得该地图的所有 100 分。
现在,这很容易;)但是...
现在另一个玩家完成了地图。让我们假设第一个玩家在 50 秒内完成,第二个玩家在 55 秒内完成,所以有点慢。我现在需要根据数据库中的两条记录进行计算。两位玩家现在都获得了 100 分的一部分。较快的玩家比较慢的玩家多一点。假设他们完成的时间完全相同,他们都将从 100 中获得 50 分,但由于第一个稍微快一点,他现在获得了大约 53 分,而速度较慢的玩家只有 47 分。
我开始这样计算:
两条记录之和为 105 秒,速度较快的玩家占其中的 50/105,因此他获得 100-(50/105*100) 分,而较慢的玩家获得 100-(55/105*100) 分.关键是,分配给玩家的所有分数总和总是等于 100。这适用于 2 名玩家,但在 3 名及以上时会中断。
例如:
玩家 1:20 秒
玩家 2:20 秒
玩家 3:25 秒
计算如下:
玩家 1:100-(20/65*100) = 69 分
玩家 2:100-(20/65*100) = 69 分
玩家 3:100-(25/65*100) = 61 分
这将不再加起来总共 100 分。
公平是指以下价值观:
玩家 1 和 2(同时)= 35 分
玩家 3 = 30 分
我的问题是我找不到解决这个问题的算法。
对于任何数量的玩家,我都需要相同的算法。有人可以帮忙出主意吗?我不需要一个完整的算法,也许只是一个想法,我在哪一步使用了错误的想法,也许所有时间的总和已经是一个糟糕的开始。
提前谢谢 :)
【问题讨论】:
标签: algorithm math logic calculation