Ссылка на проблему: https://www.codechef.com/problems/RIGHTTRI Я не знаю, почему при использовании свойства неравенства треугольника код дает неправильные ответы. Я не понимаю, почему при использовании этого свойства, он дает неправильный ответ. Вот фрагмент моего кода:
for(int i=0;i<t;i++)
{
double h=0;
if(sc.hasNext())
{
h=sc.nextDouble();
}
double s=0;
{
s=sc.nextDouble();
}
double side1=0;
double side2=0;
if(h*h*h*h>=16*s*s)
{
side1=Math.sqrt((h*h+Math.sqrt(h*h*h*h-16*s*s))/2);
side2=Math.sqrt((h*h-Math.sqrt(h*h*h*h-16*s*s))/2);
}
//to print up to given decimal digits DecimalFormat df = new DecimalFormat("###.######");
if(side1+side2>h&&h+side2>side1) //*************problem is here I guess***************
{
System.out.println(df.format(side2)+" "+df.format(side1)+" "+df.format(h));
}
else{
System.out.println("-1");
}
}
}}
См. "************* проблема здесь, я думаю, ************* ** "строка в коде. Он отлично работает при использовании условия, необходимого для sqrt, т. Е. H ^ 4> = 16s ^ 2 в блоке if, и прекрасно работает, когда я ставлю это условие: side1 == h и side2 == 0, но как может быть сторона треугольника? нуль. Заранее спасибо за помощь :)