zoukankan      html  css  js  c++  java
  • Hdoj 2036

    原题链接

    描述

    多边形形状的一块地,原本是linle 的,现在就准备送给你了。不过,任何事情都没有那么简单,你必须首先告诉我这块地到底有多少面积,如果回答正确才能真正得到这块地。

    输入描述

    输入数据包含多个测试实例,每个测试实例占一行,每行的开始是一个整数n(3<=n<=100),它表示多边形的边数(当然也是顶点数),然后是按照逆时针顺序给出的n个顶点的坐标(x1, y1, x2, y2... xn, yn),为了简化问题,这里的所有坐标都用整数表示。输入数据中所有的整数都在32位整数范围内,n=0表示数据的结束,不做处理。

    输出描述

    对于每个测试实例,请输出对应的多边形面积,结果精确到小数点后一位小数。每个实例的输出占一行。

    样例输入

    3 0 0 1 0 0 1
    4 1 0 0 1 -1 0 0 -1
    0

    样例输出

    0.5
    2.0

    思路

    据说有多边形求面积的公式,写的时候没有想到,故采用了划分为三角形的方法求解,而三角形面积考虑用向量叉乘算。
    但考虑到题目没有说是凸多边形还是凹多边形,故应该算有向面积再叠加求和。

    代码

    #include<cstdio>
    #include<cmath>
    
    int main()
    {
        int n;
        while(scanf("%d", &n) != EOF && n)
        {
        	int x1, y1, x2, y2, x3, y3, num = n - 2, s = 0;
            scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
            while(num--)
            {
            	scanf("%d %d", &x3, &y3);
            	s += (x2 - x3) * (y1 - y3) - (y2 - y3) * (x1 - x3);
            	x2 = x3;
            	y2 = y3;
        	}
            printf("%.1lf
    ", fabs(1.0 * s / 2.0));
        }
        return 0;
    }
    
  • 相关阅读:
    POI使用介绍
    Git的使用简介
    SOA架构搭建---duboo+zookeeper+SSM实现
    分布式事务介绍
    兼容安卓微信调用摄像头
    cookie
    js对手机软键盘的监听
    input 改变placeholder默认样式
    VisualVm使用JMX的方式连接远程JVM
    update批量根据条件更新
  • 原文地址:https://www.cnblogs.com/HackHarry/p/8366267.html
Copyright © 2011-2022 走看看