

注解
1、模拟题。可以模拟蚂蚁整个向上爬的过程。
2、也可以用来找规律。除了向上爬的最后一步,其他步相当于每2分钟向上(u-d),而最后一步最多可以爬u,所以剩下的高度最大为(n-u)。所以ceil((n-u)/(u-d))*2就是前面的时间,再加上最后一次向上爬u,不需要下滑。
3、注意精度,何时用double,何时用int。为了方便,n、u、d统一采用double类型,而输出的时间按题目要求,必须为int类型。
代码
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double n, u, d;
scanf("%lf %lf %lf", &n, &u, &d);
while(n || u || d){
int ans = ceil((n-u)/(u-d));
ans = ans*2+1;
printf("%d\n", ans);
scanf("%lf %lf %lf", &n, &u, &d);
}
return 0;
}
结果

本文解析了一道经典的蚂蚁爬墙模拟题,通过数学模型找到最优解,避免了复杂的模拟过程。介绍了如何利用数学规律简化问题,快速求解蚂蚁达到指定高度所需时间,并讨论了数据类型精度的重要性。
645

被折叠的 条评论
为什么被折叠?



