题目描述

平面直角坐标系中有一个三角形, 请你求出它的面积。

输入描述

第一行输入一个 T ,代表测试数据量.

每组测试数据输入有三行,每行一个实数坐标 (x,y) 代表三角形三个顶点。

1≤T≤10^3,   −10^5≤x,y≤10^5

输出描述

输出一个实数表示三角形面积。结果保留2位小数,误差不超过 10^(−2)

输入输出样例

示例 1

输入

2
0 1
1 0
1 1
0 0
1 1
2 2

输出

0.50
0.00

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

目录

前言

一、问题分析

二、计算技巧

三、代码

四、有缺点的示范

总结


前言

这是一道计算机几何基础题,难度为简单,但同样也会有很多人做错,绝大多数人的会存在的误区:

1. 使用传统的三角形面积求解公式:底*高/2

2. 使用向量,向量夹角求解

这样做的思路没错,但仅限于手工计算方便吧,使用计算机计算就会出现计算精度和误差的问题,从而导出输出结果错误。

对于数学能力比较好的人,掌握计算技巧,相信能很快就做出来了。


一、问题分析

一共有T个三角形,每个三角形都只知道三个顶点的坐标,需要分别计算各个三角形的面积并分行输出计算结果。

数据规模:T最大为10^3,坐标的范围为[-10^5,10^5],这个规模的数据可以放心计算,问题不大,完全可以很好的控制在1s内程序运行完成。

二、计算技巧

计算公式:

三个坐标点:(x1,y1),(x2,y2),(x3,y3)

面积 2S = Math.abs(x1y2+x2y3+x3y1-x1y3-x2y1-x3y2);

S = S/2

是否有印象?这是我能想到最简单和最有效的计算公式了,忘记的小伙伴可以去百度温习一下这公式


三、代码

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int N = scan.nextInt();for(int i=0;i<N;i++){double x1 = scan.nextDouble();double y1 = scan.nextDouble();double x2 = scan.nextDouble();double y2 = scan.nextDouble();double x3 = scan.nextDouble();double y3 = scan.nextDouble();double S = Math.abs(x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2);System.out.printf("%.2f",S/2);System.out.println();}scan.close();}
}

四、有缺点的示范

以下是一个输出结果不会完全正确的案例,计算方法和思路是没错的,你可以思考以下啥原因导致的部分错误,也就是部分用例可以运行通过。

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);//测试数据的组数int T = scan.nextInt();//3*T组三角形顶点的坐标  每三个坐标(x,y)为一个三角形int[][] a = new int[3*T][2];for(int i=0; i<3*T; i++){a[i][0] = scan.nextInt();a[i][1] = scan.nextInt();}scan.close();//求三角形的面积 底d*高h/2for(int i=0; i<3*T; i += 3){//知道三个顶点坐标,使用向量求解三角形面积S = 1/2*|AB|*|AC|*sinx//三个顶点  按顺序默认编号为A、B、Cdouble ABx = a[i+1][0] - a[i][0];double ABy = a[i+1][1] - a[i][1];double ACx = a[i+2][0] - a[i][0];double ACy = a[i+2][1] - a[i][1];double AB = Math.sqrt( (ABx*ABx + ABy*ABy));double AC = Math.sqrt((ACx*ACx + ACy*ACy));double cosx = (ABx*ACx + ABy*ACy)/(AB*AC);double sinx = Math.sqrt((1-cosx*cosx));double S = 0.50*AB*AC*sinx;System.out.printf("%.2f\n",S);}}
}

总结

学习算法,对于数学学的好的人可以得心应手,逻辑思维能力很重要,掌握计算技巧,往往比暴力计算更有效和更省时

蓝桥杯真题——三角形的面积相关推荐

  1. 蓝桥杯python省赛冲刺篇2——常用算法的详细解析及对应蓝桥杯真题:打表模拟法、递推递归法、枚举法、贪心算法、差分与前缀和

    注意:加了题目链接 目录 注意:加了题目链接 一.打表模拟法 介绍 1. 算式问题 题目描述 解析与代码演示 2. 求值 题目描述 解析与代码演示 3. 既约分数 题目描述 解析与代码演示 4. 天干 ...

  2. 第九届蓝桥杯真题解析JavaC组

    第九届蓝桥杯真题解析JavaC组 文章目录 ***第九届蓝桥杯真题解析JavaC组*** 前言 A.哪天回家 B.猴子分香蕉 C.字母阵列 D.第几个幸运数 E.书号验证 F.打印大X G.缩位求和 ...

  3. 蓝桥杯真题2017-2021

    刷完近几年真题,感觉理解完之后,拿奖问题不大,本人这次获得2022年蓝桥杯javaB组省一,以下是历年javaB组省赛题目. 文章目录 2017年真题 一.购物单 二.纸牌三角形 三.承压计算 四.魔 ...

  4. 第八届蓝桥杯真题解析javaC组

    第八届蓝桥杯真题解析javaC组 文章目录 ***第八届蓝桥杯真题解析javaC组*** 前言 A.外星日历 B.兴趣小组 C.纸牌三角形 D.承压计算 E.杨辉三角 F.最大公共子串 G.Excel ...

  5. 2016年第七届蓝桥杯真题解析JavaC组

    相关题目: 2016年第七届蓝桥杯真题解析JavaB组 2016年第七届蓝桥杯真题解析JavaC组 2017年第八届蓝桥杯真题解析JavaB组 2017年第八届蓝桥杯真题解析JavaC组 2018年第 ...

  6. python解答蓝桥杯真题2 猜年龄 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在19351936年应邀来中国清华大学讲学。。。

    python解答蓝桥杯真题2 猜年龄 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学.他曾在1935~1936年应邀来中国清华大学讲学... 问题描述 全排列模板: 美国数学家维纳(N. ...

  7. 第五届蓝桥杯真题解析【JavaC组】

    第五届蓝桥杯真题解析[JavaC组] 业精于勤,荒于嬉:行成于思,毁于随.--韩愈 文章目录 ***第五届蓝桥杯真题解析[JavaC组]*** 前言 A:猜年龄 B:等额本金 C:猜字母 D:大衍数列 ...

  8. 【蓝桥杯真题】16天冲刺 Python

    距离比赛很快了,希望和我一起准备的PY党能更加熟练的掌握Python! 1.距离和(模拟赛填空题) 问题描述: 两个字母之间的距离定义为它们在字母表中位置的距离.例如 A和 C 的距离为 2,L 和  ...

  9. 蓝桥杯真题:三羊献瑞

    蓝桥杯真题:三羊献瑞 观查下面的加法算式: 其中相同的汉字代表相同的数字,不同的汉字代表不同的数字. 请你填写"三羊献瑞"所代表的4位数字(答案唯一),不要填写任何多余内容. 分析 ...

最新文章

  1. jdk8中流的使用(一)
  2. java数据结构教程_Java数据结构
  3. Img与background的区别
  4. 1040 有几个PAT(PAT乙级 C++)
  5. 分布式认知在计算机应用系统,人机交互作业
  6. Web Hacking 101 中文版 十六、模板注入
  7. ios uiwindow弹窗_iOS-UIWindow详解
  8. boostrap中模态框显示在阴影之下
  9. c++之友元函数和友元类
  10. 数据结构——约瑟夫环(循环链表C语言版)
  11. 如何利用Python开发一款快手加抖音自动刷视频脚本!
  12. VUE系列——弹窗代码编写与调用弹窗过程详解
  13. 【小波分析】一、小波分析入门基础介绍
  14. 使用SSH服务管理远程主机(RHEL8)
  15. 电子合同是什么意思,电子合同怎么签才有效?
  16. 计算机函数sumif求平均值,『如何用sumif求平均年龄』excel表中如何算平均数及标准差...
  17. 在应用程序中将OJB作为一个存储层使用(六) (转)
  18. PPT设置自动保存时间 mac_CAD小技巧,教你设置AutoCAD自动保存,以防意外导致CAD图纸白做...
  19. Word线条边框和表格的应用
  20. python爬取动态网页图片

热门文章

  1. Android UI自动化测试的代码覆盖率
  2. DH算法、DHE算法、ECDHE算法演进
  3. 图片理解数字签名和验签过程
  4. 高新技术企业申报的条件,你知道吗?
  5. 麒麟9000和麒麟990哪个好
  6. CrashRpt.dll用来在应用程序出现异常crash
  7. 清华经管创业者加速器·区块链应用实验室“区块链合伙人加速计划”开启报名
  8. DeepWalk原理理解:DeepWalk: online learning of social representations
  9. SIGSEGV 11
  10. plotplay恢复默认设置_PotPlayer播放器常用设置