作为最近编码器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;
这是如何运作的?
答案 0 :(得分:1)
代码
B = (N + (S-1))/S;
是一种常见的舍入技巧。我们知道在整数除法中,余数是截止的,基本上是floor
的作用。在这种情况下,我们首先添加S-1来强制执行ceil
操作。
这类似于舍入浮点数的常用方法:
n = floor(n + 0.5);