2770: 练39.2 蜗牛爬树

内存限制:64 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:34 解决:17

题目描述

有一棵光滑的葡萄树高$17$分米,一只蜗牛从底部向上爬,每分钟爬$3$分米,但每爬一分钟后都要休息一分钟,休息期间又要滑下$1$分米。该蜗牛需要多少分钟才能爬到树顶?

输入

无。

输出

输出一个整数,表示蜗牛需要多少分钟才能爬到树顶。

样例输入 复制

样例输出 复制

需要15分钟

提示

方法1:模拟法

#include<iostream>
using namespace std;
int main( )
{
    int i,t; //i表示蜗牛爬的高度,t表示分钟数。
    t=i=0;
    while(1) //若在循环体中没有执break语句终止循环,则会形成死循环。
    {
        t++;
        i+=3;
        if(i>=17) break; //若爬到树顶,则终止循环。
        t++;
        i--;
    }
    cout<<"需要"<<t<<"分钟"<<endl;
}

方法2:

思路:蜗牛爬上树顶后就不会往下滑了,因此需要先将总高度减去最后一次白天爬到树顶的高度,再除以蜗牛每周期(两分钟)实际爬的高度,此时得到的分钟数(如果有余数,还需要加1)是蜗牛没有爬到树顶的分钟数,再加上爬上树顶那分钟,也就是蜗牛爬到树顶的总分钟数。


#include<bits/stdc++.h>
using namespace std;

int main()
{
    int h=17,up=3,down=1,t;
    /***
    先把最后一段减去:h-=up;  
    最后需要的时间加上1:t+=1; 
    ***/
	h-=up;
	t=2*h/(up-down)+(h%(up-down)>0);
	t+=1;
    cout<<"需要"<<t<<"分钟"<<endl;
    return 0;
}