首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >效率问题

效率问题
EN

Stack Overflow用户
提问于 2011-09-20 23:15:45
回答 1查看 131关注 0票数 0

我试图使我的算法更有效,但由于某些原因,它不能正常工作,谁能告诉我,如果我的逻辑是正确的。一般的问题是,如果你有一个'x‘的高度,你可以跳'u’的距离,但如果你还没有清除这个高度,你就会掉下来'd‘的距离。我得计算一下跳跃的次数。

初始代码工作正常

代码语言:javascript
复制
while(x-u>0) {
    x=x-u+d;
    i++;
}
i++;

更高效的代码(出于某些原因,我不知道哪些情况下会失败)

代码语言:javascript
复制
int k=u-d;
if(x-u<=0){
    i++;
} else {
    int z=x/k;
    if (x-((z-1)*k)-u <= 0) {
        i+=z;
    } else {
        i=i+z+1;
    }
}

让我试着澄清一下这个问题,如果你有一面高度为X的墙,你可以跳上距离U,但每次你跳的时候,你也会滑下距离D。假设你有一面高度为x=4,u=4,d=1的墙,那么你只需要跳一次,因为第一次跳的时候,你已经越过了墙,所以你根本不会滑下来。现在假设是x=6,u=4,d=1,那么你必须跳两次,因为第一次你会跳到4,但是你会掉到1,所以你在3,然后下一次跳,你就会越过墙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-20 23:21:47

好的,让我们看看。最后一次跳跃来自x - u或更高的高度。您必须在(u - d)-size步骤中介绍的其余步骤,这些步骤的数量当然是(x - u)/(u - d)

i-th步骤之后,你在i * (u - d) + u的高度(并且正在下降)。所以,在大约。你在(x - u)/(u - d) x - u + u = x的高度。回想一下,步骤数应该是一个整数,我们得到了最终结果:

代码语言:javascript
复制
if (u >= x)
    return 1;
if (u <= d)
    throw "Impossible";
return ceil((x - u)/(u - d));

(ceil是一个数学函数,返回不小于给定数字的最小整数。)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7487548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档