我有一项任务需要计算一只青蛙从X位跳到大于或等于Y的位置,给定每次跳跃的固定距离(D)。
E.g X = 10; Y = 85; D = 30;答案=((Y-X)/ D)= 3;
解决方案的复杂性必须 O(1)。
明显的解决方案不起作用:
int diff=Y-X;
int jumps=diff/D;
因为如果跳转返回一个向下舍入的double,则不会等于或大于。
我可以使用while循环:
int diff=Y-X;
int jumps=0;
int jumps_counter=0;
while(jumps<diff)
{
jumps+=D;
jumps_counter++;
}
但显然这不是O(1),而是O(x-y)......
解决这个问题的最佳方法是什么?
答案 0 :(得分:4)
明显的解决方案是将其四舍五入。
int diff = Y-X;
int jumps = std::ceil((double)diff/D);
这是一个O(1)操作,避免循环找到所需的步数。
答案 1 :(得分:0)
以整数运算
int jumps = diff / D + (diff % D ? 1 : 0);
答案 2 :(得分:-1)
D = 30尺寸跳跃,从10开始会给你
10 ---&gt; 40 ---&gt; 70 ---&gt; 100
总共3次跳跃..
你需要一个简单的公式:ceil((y-x)/d)
其中ceil(z)是大于z的最小整数
就像
import math
math.ceil( (float)(y-x)/d )