平移一个顶点到原点,两向量叉积绝对值的一半即三角形面积,再用 %.2f 输出,O(1) 无开方。
OJ: roj
题目 ID: 1034
难度:入门
标签:入门数学浮点数python
创建: 2026-09-29 15:03
更新: 2026-10-04 23:00
题目描述
给定平面上三角形的三个顶点 0 0 4 0 0 3,样例输出 6.00。
思路
把顶点 %.2f 格式化,round() 会丢掉末尾的 0。
参考代码
Python 版:
python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 15:04
# update_at: 2026-09-29 15:04
import sys
def triangle_area(x1: float, y1: float, x2: float, y2: float, x3: float, y3: float) -> float:
"""以 (x1, y1) 为公共起点的两条边向量做叉积,绝对值的一半即三角形面积。"""
return abs((x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1)) / 2
def solve() -> None:
x1, y1, x2, y2, x3, y3 = map(float, sys.stdin.read().split())
area = triangle_area(x1, y1, x2, y2, x3, y3)
print(f"{area:.2f}") # 固定保留两位小数,四舍五入
if __name__ == "__main__":
solve()C++ 版(同一算法):
cpp
/**
* Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
* rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
* rainboy的学习导航网站: https://idx.roj.ac.cn
* create_at: 2026-10-04 23:00
* update_at: 2026-10-04 23:00
*/
#include <cstdio>
#include <cmath>
typedef long long ll;
double xa, ya, xb, yb, xc, yc; // 三角形三个顶点的坐标
int main() {
scanf("%lf%lf%lf%lf%lf%lf", &xa, &ya, &xb, &yb, &xc, &yc);
// 把顶点 A 平移到原点,两向量叉积的绝对值等于平行四边形面积,一半即三角形面积
double cross = (xb - xa) * (yc - ya) - (xc - xa) * (yb - ya);
double area = fabs(cross) / 2.0;
printf("%.2f\n", area); // 固定两位小数,四舍五入并自动补 0
return 0;
}