HDU 1049 Climbing Worm

本文解析了一道经典的爬高问题,通过数学公式推导出计算爬到特定高度所需时间的算法。利用上取整运算,文章给出了简洁的C++代码实现,解决了每分钟爬升与下滑的周期性运动问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1049

大意为:每分钟向上爬b米,休息时每分钟下落c米。问爬a米的高度需要花费多长时间?

时间t为:经过k(0<=k)次(上爬+下滑)并加上最后x(0<x<=b)英寸的冲刺

由题意可知:a-b英寸这段距离是必须通过(上爬+下滑)的方式来走的,最后b英寸才有可能是直接上爬到达的

时间t=上取整[(a-b)/(b-c)]*2+1

而x/y的上取整=(x+y-1)/y

故t=[(a-c-1)/(b-c)]*2+1

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

int main()
{
    int a,b,c;
    while(scanf("%d %d %d",&a,&b,&c)!=EOF)
    {
        if(a==0&&b==0&c==0)
            break;
        int sum=((a-c-1)/(b-c))*2+1;
        printf("%d\n",sum);
    }
    return 0;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值