兄弟郊游问题
-
描述
-
兄弟俩骑车郊游,弟弟先出发,每分钟X米,M分钟后,哥哥带一条狗出发。以每分钟Y米的速度去追弟弟,而狗则以每分钟Z米的速度向弟弟跑去,追上弟弟后又立即返回,直到哥哥追上弟弟时,狗跑了多少米?
-
输入
-
第一行输入一个整数N,表示测试数据的组数(N<100)
每组测试数据占一行,是四个正整数,分别为M,X,Y,Z(数据保证X<Y<Z)
输出
- 输出狗跑的路径,结果保留小数点后两位。 样例输入
-
1 5 10 15 20
样例输出
-
200.00
来源
- 经典数学问题 上传者
问题链接:http://acm.nyist.net/JudgeOnline/bestcode.php?pid=97
问题分析:
在哥哥追上弟弟的时候存在以下等式:
假设用了ts弟弟追上了哥哥,则
弟弟提前走的距离+弟弟在t时间内走的距离=哥哥在t时间内走的距离
狗狗走的距离=狗狗的速度×t
由第一个等式可以求出时间t,第二个求出结果。
代码:
优秀代码:#include <iostream> #include <stdio.h> #include <string.h> #include <math.h> #include <vector> #include <queue> #include <stack> #include <map> #include <string> #include <algorithm> using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char** argv) { int n; scanf("%d",&n); while(n--){ double m,x,y,z; scanf("%lf%lf%lf%lf",&m,&x,&y,&z); //double t=(m*x)/(y-x); printf("%.2lf\n",z*(m*x)/(y-x)); } return 0; }对比:01.#include<iostream>02.#include<stdio.h>03.usingnamespacestd;04.intmain()05.{06.intn;07.cin>>n;08.while(n--)09.{10.ints,a,b,c;11.cin>>s>>a>>b>>c;12.printf("%.2lf\n",s*a/(double)(b-a)*c);13.}14.15.}
不同之处在于我为了方便直接全部用了double型的变量,而优秀代码只是在结果的分母中转换为了double型。
收获:
printf("%.2lf") lf用于double型变量的输出,.2用于控制小数点的固定位数。
还有就是明天查查c语言书,看看除法得出的结果的类型是怎么控制的。
-
第一行输入一个整数N,表示测试数据的组数(N<100)
本文解析了一道经典的数学问题——兄弟郊游问题。通过设定合理的数学模型,文章给出了高效的算法实现,并提供了两种不同的代码实现方式。
1573

被折叠的 条评论
为什么被折叠?



