题目:
狼的洞穴与屠夫的家距离为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);
}