在影子没有到达墙角前,人越远离电灯,影子越长,所以这一部分无需考虑
所以只需要考虑墙上影子和地上影子同时存在的情况
因为在某一状态存在着最值
所以如果以影子总长与人的位置绘制y-x图像
会呈一个类似y=-x^2函数的图像
所以就可以根据三分法找出最值点
#include<stdio.h> double H,h,D; double len(double lh){ return lh+D*(h-lh)/(H-lh); } int main(){ int T; double l,r,m1,m2; scanf("%d",&T); while(T--){ scanf("%lf%lf%lf",&H,&h,&D); l=0;r=h; while(r-l>=1e-5){ m1=l+(r-l)/3.0;//三分左 m2=l+(r-l)/1.5;//三分右 if(len(m1)>len(m2)) r=m2; else l=m1; } printf("%.3lf ",len(l)); } return 0; }