hdu 1049 Climbing Worm

hdu 1049 Climbing Worm

解题思路:

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 ;
}
上一篇:SNS社交系统“ThinkSNS V4.6”活动应用功能详解及应用场景举例


下一篇:Node.js:包