JZXX2774 军事演习

问题 : 军事演习

题目描述

小明的知识面很广,喜欢阅读各种书籍,尤其是军事科普读物,一有时间就和其他同学争论起哪一种武器更先进更厉害。爸爸鼓励小明不仅仅要看外在的东西,更要研究内在的战略和技术,于是给他买了一本《军事小科普》。小明今天看到军事演习这节,被一个问题吸引住了:
某军区开展军事演习,红军指挥部接到紧急电报:负责向蓝军据守的13号高地发起进攻的A队数次冲锋之后,还没有拿下目标,且损失较大,需要支援。于是红军马上调集靠近13号高地的C、D两只队伍前去支援。C、D两队打算会师之后再开往A队驻地,已知C、D两队相距S公里,C队行进速度为Vc公里/小时,D队为Vd公里/小时,C、D两队同时出发进行会师。另有一名通讯员骑摩托车从C队驻地与C队一起出发,一遇到D队马上折回驶向C队,以此类推,每遇一队立即折回驶向另一队,为行进中的两队传递信息。摩托车的速度为Vm公里/小时。当两队距离小于等于0.8公里时,摩托车停下来不再传递信息。输入S、Vc、Vd、Vm的值,计算通讯员一共跑了多少趟(从一队驶向另一队为一趟)。
请你编写程序帮助小明解决这个问题。

输入

输入文件共有4行:
第1行为C、D两队相距的距离S(50<=S<=100);
第2行为C队行进速度Vc(5<=Vc<=10);
第3行为D队行进速度Vd(4<=Vd<=8);
第4行为摩托车的速度Vm(30<=Vm<=60)。

输出

输出文件只有一个数:通讯员一共跑的趟数。

样例输入

100
5
4
60

样例输出

33

解答:化繁为简,把每一趟的操作想清楚,然后循环计数就OK。

#include <iostream>
using namespace std;

 
int main()
{
	double s,vc,vd,vm;
	cin>>s>>vc>>vd>>vm;
	double t;    //走一趟时间 
	int a=0;     //answer
	while(s>0.8)
	{
		a++;
		if(a%2==1)     //判断方向,与C同向 
			t=s/(vd+vm);
		else          //与D同向 
			t=s/(vc+vm);    
		s=s-(vc+vd)*t;     //扣除这趟的距离 
	}
	cout<<a<<endl;
    return 0;
}


猜你喜欢

转载自blog.csdn.net/lrzh0123/article/details/86219992