计算每个盒子放置N个对象所需的盒子数量的计算技巧可以容纳M个对象吗?

时间:2013-12-14 23:58:58

标签: c++

作为最近编码器SRM问题的一部分,我们必须计算携带“N”人所需的总线数“B”,因为每辆公交车都有“S”座位。

在C ++中计算这个的最聪明的方法是什么? 显而易见的方法是:

if(N%S==0){B=N/S;}
else{ B=N/S + 1;}

^所有变量都是整数,N和S分配适当的值

但是我无法理解以下代码背后的逻辑,这是我正在检查的一个特定的topcoder用户解决方案;

   B = (N + (S-1))/S;

这是如何运作的?

1 个答案:

答案 0 :(得分:1)

代码

B = (N + (S-1))/S;

是一种常见的舍入技巧。我们知道在整数除法中,余数是截止的,基本上是floor的作用。在这种情况下,我们首先添加S-1来强制执行ceil操作。

这类似于舍入浮点数的常用方法:

n = floor(n + 0.5);