• 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
    ",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
    ",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
    ",sum*2+1 );
    10     }
    11     return 0;
    12 }
  • 相关阅读:
    数据库基础
    Junit单元测试、反射与注解
    Stream流
    Java IO所用类
    字符集
    Lambda表达式
    【jdk1.8源码分析】LinkedHashMap
    线性表
    【jdk1.8源码分析】ArrayList
    java学习血泪史
  • 原文地址:https://www.cnblogs.com/A--Q/p/5719353.html
Copyright © 2020-2023  润新知