蓝桥杯 两军交锋

Problem Description
话说辽军与MCA相峙多年,终于在一个秋日的早晨爆发了一次大规模的冲突.情况是这样子的,当天上午,由耶律-Pacision领军的辽军忽然带领数万人马浩浩荡荡向MCA山杀来,而这时候驻扎在MCA防守前线的是久经沙场的老将纪哥.纪哥得知这个消息,立刻召集手下精英,前往阻击辽军.现已知辽军前进速度 U 米/秒 ,纪哥 速度 V 米 /秒 ,两军一开始相距L米,战地记者从两军刚开始进军就立刻开始以 W 米/秒的速度马不停蹄地往返于两军之间作第一时间的报道,即一到达一方,立刻返回前往另一方.问,当两军交锋之时,战地记者总共走的路程.

Input

首先输入一个t,表示有t组数据,跟着t行:
每行有四个实数 u ,v , w , l 分别表示辽军速度,纪哥速度,记者速度,以及起始的距离.

Output

输出一行实数表示总的路程.精确到小数点后3位.

Sample Input

 
 
1 10 20 30 100

Sample Output

 
 
100.000

解析:


import java.util.Scanner;

public class Main {
	/**
	 * 此题很简单,只需要用(路程/(两军速度相加))求出两军交锋的时间,然后用时间
	   乘以记者的速度就可以了。
	   
	 * 我一开始做这个题目的时候,想得太复杂了,相当于把记者走的过程全部算出来了。
	   开始的思路:此题需要细心计算,需要考虑战地记者还没有到达一方军队,他们就已经
	   开始交战的情况;还需要考虑如果距离小于多少就可以开始结束死循环。
	 */
	public static void main1(String[] args) {
		Scanner input = new Scanner(System.in);
		while (input.hasNext()) {
			int t = input.nextInt();
			while (t-- > 0) {
				double u = input.nextDouble();
				double v = input.nextDouble();
				double w = input.nextDouble();
				double l = input.nextDouble();
				double uv = u + v;
				double vw = v + w;
				double uw = u + w;
				double dis = 0;
//				System.out.println(uv+" "+vw);
				/*
				 * 以辽军为左方,以纪哥为右方,战地记者从左方与纪哥去相遇
				   但是要考虑到当辽军速度比战地记者快时,战地记者还没有碰
				   见纪哥,两军就已经开始交锋了。
				 */
				
				if (u >= w) {
				
					double time = l / uv;
					dis = w * time;
				
				} else {
					boolean mark = true;
					double time, du, dv;
					while (l >= 0.001) {

						if (mark) {
							time = l / vw;
							mark = false;
						} else {
							time = l / uw;
							mark = true;
						}

						du = u * time;
						dv = v * time;
						dis += w * time;
						l -= du + dv;
					}

				}
//				System.out.println(dis);
				System.out.printf("%.3f",dis);
				System.out.println();
			}
		}
	} public static void main(String[] args) {

	        Scanner input = new Scanner(System.in);
	        int t = input.nextInt();
	        for (int total = 0; total < t; total++) {
	            double u = input.nextDouble();
	            double v = input.nextDouble();
	            double w = input.nextDouble();
	            double l = input.nextDouble();
	           double juli=l/(u+v)*w;
	            System.out.printf("%.3f", juli);
	            System.out.println("");
	        }

	    }
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值