有四根木棍,长度分别为 a b c d ,求着四根木棍组成四边形的最大面积。

输入格式

第一行包含一个整数 Ca ( Ca ≤ 10000 ) ,表示有 Ca 组测试数据,对于每组测试数据:

输入包含一行,该行包含四个整数 a b c d ( 1 ≤ a , b , c , d ≤ 1000 ) 。

输出格式

对于每组测试数据,输出 "Case c: ans" ,其中 c 表示测试数据编号, ans 表示最大的面积,小数点后保留六位,如果不能组成四边形,则 ans 处输出 -1 。

样例输入

3
1 2 4 8
2 3 4 5
6 3 2 5

样例输出

Case 1: -1
Case 2: 10.954451
Case 3: 13.416408
#include <bits/stdc++.h>
using namespace std;
bool judge(double a,double b,double c,double d)
{double total = a+b+c+d;double maxn = max(a,b);maxn = max(maxn,c);maxn = max(maxn,d);if(total > 2*maxn) //判断能否构成四边形 return true;return false;
}
int main()
{int n;double a,b,c,d,sum,s;scanf("%d",&n);for(int i = 1; i <= n; i++){cin>>a>>b>>c>>d;if(judge(a,b,c,d)){s = (a+b+c+d)/2.0;sum = sqrt((s-a)*(s-b)*(s-c)*(s-d));printf("Case %d: %.6lf\n",i,sum);}elseprintf("Case %d: -1\n",i);}return 0;
}

一般四边形面积公式:    (百度 婆罗摩笈多公式)

推导:

(1)可以得到:S=

absinA+cdsinC

(2)由余弦定理可得:BD^2 = a^2+b^2-2abcosA = c^2+d^2-2cdcosC;

即: a^2+b^2-c^2-d^2 = 2abcosA-2cdcosC

(1)和(2)平方后相加(需要稍微的处理一丢丢)得:

4S^2+(a^2+b^2-c^2-d^2 )^2 /4 = (absinA+cdsinC)^2+(abcosA-cdcosC)^2;

4S^2+(a^2+b^2-c^2-d^2 )^2 /4 = (ab)^2+(cd)^2-2abcd(cos(A+C));

当A+C = 180°时即cos(A+C) = -1  面积S最小(看出来了吧)

则:

S^2 = ( (ab)^2+(cd)^2 +2*abcd )/4 - (a^2+b^2-c^2-d^2 )^2 /16;

S^2 = ( (2ab+2cd)^2- (a^2+b^2-c^2-d^2 )^2  ) / 16;

平方差公式后:

S^2 = (  (a+b)^2 - (c+d)^2)((c+d)^2 -  (a+b)^2  )/16

平方差公式后:

S^2 =(a+b+c-d)(a+b+d-c)(a+c+d-b)(b+c+d-a);

S =     (此时A,B,C,D位于其外接圆上)

其中s为半周长:

已知四边形四条边求四边形最大面积相关推荐

  1. 已知三角形三条边长 求三角形的面积

    1.三角形三边为 a, b, c 面积公式: func area(_ a: Double, _ b: Double, _ c: Double) -> Double{let p = (a + b ...

  2. 输入半径r求圆的面积java_已知圆的半径r,求圆的面积S_学小易找答案

    [简答题]编写一个程序实现交换两个变量的数值. [简答题]编制密码器,实现给友军发送加密电报,报文由字母a~n组成,每输入一个字母,输出与其相邻的字母. [简答题]任意输入两个数,完成加法.减法.乘法 ...

  3. 已知三角形三点坐标, 求三角形的面积

    摘自:http://blog.sina.com.cn/s/blog_4cddcaa3010008u7.html 已知三角形三点坐标, 求三角形的面积 发表时间:2004-8-10 作者:未知[获得此文 ...

  4. C语言:已知圆的半径,求圆的面积(使用顺序结构)

    首先可以使用宏定义来确定Π的值,再通过键盘输入来获得圆的半径,最后使用圆的面积公式(s=Π*r*r)来计算圆的面积. 代码如下: #include <stdio.h> #define pi ...

  5. python求平行四边形面积_python 已知平行四边形三个点,求第四个点的案例

    我就废话不多说了,大家还是直接看代码吧! import numpy as np #已知平行四边形三个点,求第四个点 #计算两点之间的距离 def CalcEuclideanDistance(point ...

  6. (海伦公式)已知三角形三条边长,求面积

    (海伦公式)已知三角形三条边长,求面积 海伦公式:  S=(△)=√[p(p-a)(p-b)(p-c)]  其中p是三角形的周长的一半p=(a+b+c)/2. ----以下转自百度百科-------- ...

  7. python写的平行四边形_python 已知平行四边形三个点,求第四个点的案例

    我就废话不多说了,大家还是直接看代码吧! import numpy as np #已知平行四边形三个点,求第四个点 #计算两点之间的距离 def CalcEuclideanDistance(point ...

  8. 天文观测理论——已知像素大小、焦距,求像素分辨率

    一.已知像素大小.焦距,求像素分辨率 1. 计算 像素分辨率为 Pix, 单位:角秒/像素 像素大小为 d2d^2d2, 单位:平方毫米 焦距为 fff, 单位:毫米 总像素为 rerere, 单位: ...

  9. c 语言已知两点求第三点,已知3点座标,求第一点到第二点和第三点构成的直线的距离。...

    已知3点座标,求第一点到第二点和第三点构成的直线的距离.以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 已知3点座标,求 ...

最新文章

  1. mysql union 优化_mysql 5.7.3 对union all 的优化
  2. MySQL 复制夯住排查以及原理探讨
  3. MySQL 使用Navicat连接MySQL8出现1251错误
  4. Windows内置系统账户Local system/Network service/Local Service
  5. 在Eclipse中手动安装pydev插件
  6. php打包命令,PHP调用Linux的命令行执行文件压缩命令
  7. [转]反射(用反射调用任意.net库中的方法)
  8. [加壳脱壳] VMP壳原理简介
  9. ulead gif animator 5.11中文破解版|ulead gif animator绿色中文破解版下载 v5.11
  10. 如何利用python监控主机存活并邮件、短信通知
  11. c语言pow为什么溢出,c – GMP pow中的溢出处理
  12. 运维排查篇 | 访问nginx出现403错误
  13. Unity打开.exe文件
  14. CAD学习笔记中级课【CAD快捷键】
  15. PDF文件怎么在线拆分?教你在线拆分方法
  16. SVG排版 | 深色模式彩蛋
  17. 区别:αβ^T、βα^T、αα^T、(Aα)(Aα)^T、β^Tα、α^Tβ、α^Tα、(Aα)^T(Aα)
  18. asp.net师电子化信息库的设计与实现(源代码+论文)ASP.NET汽车销售管理系统的设计与开发(源代码+论文)
  19. c#发送邮件(带抄送,密送,群发,附件)
  20. 数学建模学习记录——数学规划模型

热门文章

  1. Unix时间戳和北京时间的相互转换(C语言实现 )
  2. 【相似的生活,不可思议】
  3. 中国软件缺少核心技术 自主创新是关健
  4. Power BI 关于日期显示格式的那些事儿
  5. 虽败犹荣的McCain
  6. Linux动态库环境变量设置
  7. html5元素拖曳的小小实践
  8. 直播代码Flutter 实现虎牙/斗鱼 弹幕效果
  9. hooks useRef 报错object is possibly undefined
  10. 软件中间件,你知道哪些?