递推算法---狼与屠夫

题目:

狼的洞穴与屠夫的家距离为c; 当屠夫经过狼的洞穴时,狼需要t秒才能发现屠夫; 当狼追上屠夫时,屠夫丢一块骨头给狼,狼把骨头叼回洞穴,并花费f秒把骨头藏起来,然后再去追屠夫; 屠夫的速度为vp,狼的速度为vd; 问屠夫要丢几块骨头才能回到家?

分析:

1.用s表示屠夫的位置,则可以用s与c比较,来确定屠夫是否需要继续扔骨头。

2.初始的s可以定为狼第一次追上屠夫时的位置,即s=vp*t+vp*t/(vd-vp)*vp。

3.可以将屠夫位置的计算分为两部分,先计算当狼藏好骨头时(再次追屠夫的时间)屠夫的位置;

以此为基础计算狼再次追上屠夫时的位置,此时要再扔一个骨头。

代码:

#include<stdio.h>
int main()
{
    float vp,vd,t,f,c,s,s1,t1,t2;
    int i=0;
    printf("请输入屠夫的速度vp:");
    scanf("%f",&vp);
    printf("请输入狼的速度vd:");
    scanf("%f",&vd);
    printf("请输入狼发现屠夫的时间t:");
    scanf("%f",&t);
    printf("请输入狼藏骨头的时间f:");
    scanf("%f",&f);
    printf("请输入狼洞穴与屠夫家的距离c:");
    scanf("%f",&c);
    if(vd<=vp)
        printf("狼追不上屠夫n");
    else
    {
        s=vp*t+vp*t/(vd-vp)*vp;
        while(s<c)
        {
            i++;
            t1=s/vd+f;//狼回到藏好骨头的时间
            s1=s+vp*t1;//狼藏好骨头时,屠夫的位置(狼开始追时屠夫的位置)
            t2=s1/(vd-vp);//狼重新追上屠夫的时间
            s=s1+vp*t2;//狼追上屠夫时的位置
        }
    }
    printf("%dn",i);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值