• 两军交锋


    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("");
                }
    
            }
        
    }



  • 相关阅读:
    hdoj-1005-Number Sequences
    FOJ-1058-粗心的物理学家
    程序设计第三次作业附加 代码规范
    简单数论
    FOJ-1001-Duplicate Pair
    链表初尝试-链表的构建与输出-指针
    函数递归简单题-hdoj-2044 2018-一只小蜜蜂 母牛的故事
    电路与电子学-第一章直流电路分析方法小概括
    DFS回溯-函数递归-xiaoz triangles
    进制转换 hdoj-2031
  • 原文地址:https://www.cnblogs.com/syjp/p/10360526.html
Copyright © 2020-2023  润新知