解题思路:
1. 两种情况,0x1:井深度小于一次跳的高度.0x2:井深度大于一次跳的高度
2.如果 属于 0x1 则一次跳出
3.否则 本次解题中直接枚举跳的次数
一直循环,直到 【每次跳的真实高度(一次高度减去滑下的高度)】*【次数(循环)】+【最后一次(一次的高度)】大于等于井深度
得到次数
4. 输出:次数*2+1
次数*2:每跳一次,休息一分钟
+1 :最后一跳,直接跳出井
Ac code:
#include<stdio.h>
int main(void)
{
int n,u,d;
int sum,i;
while(scanf("%d%d%d",&n,&u,&d)!=EOF&&n)
{
if(n<=u)sum=1;
else
{
for(i=1;; i++)
if(n<=((u-d)*i+u))
break;
sum=2*i+1;
}
printf("%d\n",sum);
}
return 0;
}
错误版本,求大神指正:
sum 可以看成求得次数。
(n-u):去掉最后一跳
(u-d):每次跳的真实高度
取得最后一跳 / 每次的高度 , 并强制转换成 double +0.5
举例:
n=10 u=2 d=1: 8 / 1 +0.5 =8 ->8*2+1=17
n=20 u=3 d=1: 17 /2 +0.5=9->9*2+1=19
错的不知所云
#include<stdio.h>
int main(void)
{
int n,u,d;
int sum;
while(scanf("%d%d%d",&n,&u,&d)!=EOF&&n)
{
sum=(int)(((double)(n-u)/(u-d))+0.5);
printf("%d\n",sum*2+1 );
}
return 0;
}
经Taskr同学提醒: 10 9 1 该组测试数据发现问题
修正版AC代码:
#include<stdio.h>
int main(void)
{
int n,u,d;
int sum;
while(scanf("%d%d%d",&n,&u,&d)!=EOF&&n)
{
sum=ceil(((double)(n-u)/(u-d))); //仅修改了本行
printf("%d\n",sum*+ );
}
return ;
}