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代码:

 1 #include<stdio.h>
 2 int main(void)
 3 {
 4     int n,u,d;
 5     int sum;
 6     while(scanf("%d%d%d",&n,&u,&d)!=EOF&&n)
 7     {
 8             sum=ceil(((double)(n-u)/(u-d))); //仅修改了本行
 9             printf("%d\n",sum*2+1 );
10     }
11     return 0;
12 }

 

posted @ 2016-07-29 18:10  马丁黄瓜啊  阅读(292)  评论(2编辑  收藏  举报