【问题标题】:Calculating how many trucks are needed for a cargo (Follow-up)计算一个货物需要多少辆卡车(跟进)
【发布时间】:2012-10-29 18:32:04
【问题描述】:

相关问题:Calculating truck cargo capacity in a game

在我的相关问题中,我有 3 种不同类型的卡车,但我决定对其进行简化,并且只使用一个简单的数字来表示每个玩家拥有多少辆卡车。

我需要知道我需要多少辆卡车来运送给定的货物。

每辆卡车可以运载 50 个板条箱 (truckCapacity)

玩家 1 有 0 辆卡车 (numberOfTrucks)

我要搬运的货物是 10 箱 (cargo)

我尝试了以下方法;

sum = truckCapacity / cargo
= 5

这是错误的,如果我要移动 10 个板条箱,应该是 1 个。因为我只需要 1 辆卡车就可以移动 10 个板条箱

我试过了

sum = truckCapacity - cargo
= 40

但这并不能告诉我我需要多少卡车。

根据我的相关问题中接受的答案,我尝试过,

current_capacity(truck) = total_capacity(truck) - loaded_crates(truck)

但这一次只能装载一辆卡车,并没有告诉我需要额外购买多少辆卡车。

我追求的是;

我输入货物,它返回需要多少卡车才能移动所述货物。

如果我有很多货物要搬运,它也应该可以工作。所以,如果我想移动 500 个板条箱,它应该告诉我需要 10 辆卡车(每辆卡车 50 个板条箱 * 10 辆卡车 = 移动 500 个板条箱)

诸如卡车剩余多少空间之类的事情并不重要。

【问题讨论】:

  • 你试过推荐的吊顶(cargo/truckCapacity)吗?如果 cargo 和 truckCapacity 都具有整数类型,则应该将它们转换为 double 以进行除法。例如,如果您有 truckCapacity 50 和 125 箱货物,则 cargo/truckCapacity 为 2.5,上限增加到 3。

标签: algorithm math


【解决方案1】:

已经给出了正确的答案,但我想告诉你为什么它是正确的,以及你如何根据你已经知道的情况自己想出它:

你自己的计算中,你说:

每辆卡车 50 个板条箱 * 10 辆卡车 = 移动了 500 个板条箱

象征性地写成:

cratesPerTruck * trucks = crates

这就是说,给定容量和可用卡车的数量,您可以计算出可以移动多少板条箱。

您现在可以解决卡车

cratesPerTruck * trucks = crates                       -- 两边除以 cratesPerTruck
cratesPerTruck / cratesPerTruck * trucks = crates / cratesPerTruck
@987654327 @
trucks = crates / cratesPerTruck

有你的答案。

直觉

除法有两种常见的解释:

  1. 分布
  2. 将对象装入另一个对象1

拟合:我们也可以问自己,一个数字与另一个数字拟合多少次。
例如,我们需要跨越 50 米的链条,但我们只能购买 2 米的链条。我们需要将多少条链链接在一起?

50 / 2 = 25: 2 米 50 米 25 倍,所以我们需要 25 条 2 米链条。

应用拟合到您的示例:假设您的每个板条箱长一米,总共有 50 个。其次,您的每辆卡车都有一个 10 米长的装载区。您可以想象将装载区排成一列,因此您需要知道一个装载区总共可以装入 50 米的板条箱的次数。

需要50/10 = 5 卡车。

分布:假设我们有 10 个苹果和 5 个人。我们将苹果分发给人们,每个人得到多少申请?

10/5 = 2,所以每个人都有两个苹果。

将分布应用到您的示例不太直观2,但它确实有效。
假设一辆卡车有 4 个板条箱的容量,所以有 1、2、3 和 4 点。

如果您将板条箱堆放在这四个位置上,您获得的层数等于您需要多少辆卡车来运输整个负载。

如果我们有 24 个板条箱要分配到各个点,那么每个点将堆放 6 个板条箱,这意味着您总共需要 6 辆卡车。

维度分析

cratesPerTruck 描述了一个比率——正如 per 所暗示的那样——速度与描述多少米的方式相同秒你走:

  • 板条箱被卡车分开
  • 米除以秒

从这个简单的单词替换中可以看出,这些单位描述了一个部门

如果你用 crates divided by trucks 来划分箱子的数量,你会得到以下结果:

除以分数与乘以它的倒数相同。 [crates] 然后取消,留下[trucks]


脚注
1或者给我一个更好的想法的评论。

【讨论】:

  • 谢谢你,我的数学大部分时间都不是很好,所以我很感激!
【解决方案2】:

分裂是要走的路,但你分裂的方向错误。如果你知道cargocargo_per_truck,那么:

trucks = cargo / cargo_per_truck

因此,给定 500 个板条箱,每辆卡车 50 个板条箱,您需要 500/50 = 10 辆卡车。

当然,这会给你零碎的卡车 - 如果有 10 个板条箱,你需要 10/50 = 0.2 辆卡车 - 所以你需要总是四舍五入:

trucks = ceil(cargo / cargo_per_truck)

【讨论】:

  • 除法中整数计算的影响可能还值得一提。在某些语言(例如 c#)中,10/50 将为 0,因为它会将其计算为整数。当然,在 c# 中,您不能在整数上使用 Math.Ceiling。不过,这当然是一个值得一提的坑洼。
  • @Chris 使用整数,你可以做到(cargo + (cargo_per_truck - 1)) / cargo_per_truck
【解决方案3】:

这是天花板(货物/卡车容量)。

在数学和计算机科学中,下限和上限函数分别将实数映射到最大的前一个整数或最小的后一个整数。更准确地说, floor(x) = 是不大于 x 的最大整数,而 ceiling(x) = 是不小于 x 的最小整数。 http://en.wikipedia.org/wiki/Floor_and_ceiling_functions

【讨论】:

    【解决方案4】:

    您可以尝试使用:

    (5021 / 50) 模 1

    其中 5021 是您的货物50是您的运力 。 您将按货物/容量获得卡车数量。 mod部分将检查提取卡车后剩余的内容,1比1。

    在这种情况下,此值将返回 0 或 1,因为它是一个整数,它只显示整数。

    所以你想要的是检查你是否还有任何东西。 如果没有(mod 返回 0) 您需要 货物/容量 = trucksNeeded。 如果有(mod 返回 1),您需要 (cargo/capacity) + 1 = trucksNeeded。

    简而言之: trucksNeeded = (货物/容量) + (货物/容量 mod 1)

    【讨论】:

      猜你喜欢
      • 2021-09-06
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      • 2016-09-08
      • 1970-01-01
      相关资源
      最近更新 更多