Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ O(1)恒定时间溶液示例?_C++_Loops_Big O - Fatal编程技术网

C++ O(1)恒定时间溶液示例?

C++ O(1)恒定时间溶液示例?,c++,loops,big-o,C++,Loops,Big O,我有一项任务,需要计算青蛙从位置X跳到大于或等于Y的位置,给定每次跳跃的固定距离(D) 例如 X=10;Y=85;D=30;答案=((Y-X)/D)=3 解决方案的复杂性必须是O(1) 显而易见的解决方案不起作用: int diff=Y-X; int jumps=diff/D; 因为如果jumps返回一个向下舍入的双精度数,它将不等于或更大 我可以使用while循环: int diff=Y-X; int jumps=0; int jumps_counter=0; while(jumps<

我有一项任务,需要计算青蛙从位置X跳到大于或等于Y的位置,给定每次跳跃的固定距离(D)

例如 X=10;Y=85;D=30;答案=((Y-X)/D)=3

解决方案的复杂性必须是O(1)

显而易见的解决方案不起作用:

int diff=Y-X;
int jumps=diff/D;
因为如果jumps返回一个向下舍入的双精度数,它将不等于或更大

我可以使用while循环:

int diff=Y-X;
int jumps=0;
int jumps_counter=0;

while(jumps<diff)
{
 jumps+=D;
 jumps_counter++;
}
int diff=Y-X;
int跳跃=0;
int/u计数器=0;

而(跳跃明显的解决办法是将其四舍五入

int diff = Y-X;
int jumps = std::ceil((double)diff/D);

这是一个O(1)操作,避免了寻找所需步骤数的循环。

显而易见的解决方案是将其四舍五入

int diff = Y-X;
int jumps = std::ceil((double)diff/D);

这是一个O(1)操作,可以避免循环查找所需的步数。

如果D=30,则从10开始跳转将为您提供

10--->40--->70--->100

总共跳了3次

您需要一个简单的公式:
ceil((y-x)/d)
其中ceil(z)是大于z的最小整数

在python中,这就像

import math
math.ceil( (float)(y-x)/d )

当D=30码跳跃时,从10码开始会给你

10--->40--->70--->100

总共跳了3次

您需要一个简单的公式:
ceil((y-x)/d)
其中ceil(z)是大于z的最小整数

在python中,这就像

import math
math.ceil( (float)(y-x)/d )
整数算术

int jumps = diff / D + (diff % D ? 1 : 0);
整数算术

int jumps = diff / D + (diff % D ? 1 : 0);

取而代之的是四舍五入。取而代之的是四舍五入?如果不允许使用
ceil
,请使用
#定义上限(X)(X-(int)(X)>0?(int)(X+1):(int)(X))
。摘自
http://www.linuxquestions.org/questions/programming-9/ceiling-function-c-programming-637404/
取而代之,取而代之,使用取而代之?如果不允许使用
ceil
,请使用
#定义上限(X)(X-(int)(X)>0?(int)(X+1):(int)(X))
。摘自
http://www.linuxquestions.org/questions/programming-9/ceiling-function-c-programming-637404/
公式不是3*(Y-X)/D。3只是(Y-X)/D的输出。公式不是3*(Y-X)/D。3只是(Y-X)/D的输出