题目链接:点击打开链接
代码:
#include<stdio.h>
#include<algorithm>
using namespace std;
#include<math.h>
#include<bits/stdc++.h>
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
double q[5];
double l;
scanf("%lf%lf%lf%lf",&q[0],&q[1],&q[2],&l);
double q1;
q1=l;
sort(q,q+3);
while(1)
{
if(q[0]<q[1])
{
q1-=(q[1]-q[0]);
q[0]+=(l>=(q[1]-q[0]))?q[1]-q[0]:l;
l=q1;
}
// printf("%.2lf %.2lf %.2lf %.2lf\n",q[0],q[1],q[2],l);
if(l<=0.0)
break;
if(q[1]<q[2])
{
if(l>=2.0*(q[2]-q[1]))
{
l-=2*(q[2]-q[1]);
q[0]+=q[2]-q[1];
q[1]+=q[2]-q[1];
}
else
{
q[0]+=l/2.0;
q[1]+=l/2.0;
l=0;
break;
}
if(l<=0.0)
break;
}
q[0]+=l/3.0;
q[1]+=l/3.0;
q[2]+=l/3.0;
// printf("%.2lf %.2lf %.2lf %.2lf\n",q[0],q[1],q[2],l);
break;
}
double w=(q[1]+q[0]+q[2])/2.0;
double s=sqrt(w*(w-q[0])*(w-q[1])*(w-q[2]));
printf("%.10lf\n",s);
}
return 0;
}简单思维题
本文提供了一种通过逐步调整三条边长度来计算最大可能三角形面积的算法实现。该算法首先对输入的三条边进行排序,并通过循环迭代的方式调整边长直至无法继续增加面积或者材料用尽。最终输出所能构成的最大面积。

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



