zoukankan      html  css  js  c++  java
  • 杭电 2036 改革春风吹满地【求多边形面积】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2036

    解题思路:将多边形划分成n个三角形,将这些三角形的面积依次累加求和即可,这里将多边形划分成若干个小三角形时有两种办法。

    1

    在多边形的内部任意选择一个点O,这样可以将n边行划分成n个小三角形,将这n个三角形的面积加起来就可以了。详情参见http://blog.csdn.net/sun_shine_/article/details/18799739

    2

    选择多边形上的一个点作为每个划分出来的小三角形的顶点,如果是多边形p1p2p3-----pn的话,就可以选择p1作为顶点,这样可以划分成n-2个小三角形。

    将这n-2个小三角形的面积加起来就可以了。

    反思:在用第一种方法做的时候,一定要注意求最后一个三角形的时候,它又与最开始的第一个三角形连接起来了,单独算最后一个就可以了。

    1

    #include<stdio.h>
    int main()
    {
        int n;
        int x[100],y[100];
        double s;
        int i;
        while(scanf("%d",&n)!=EOF&&n)
        {
            s=0;
                for(i=1;i<=n;i++)
            {
                scanf("%d %d",&x[i],&y[i]);
            }
            for(i=1;i<n;i++)
            {
                s+=(x[i]*y[i+1]-x[i+1]*y[i])*0.5;
    
            }
            s+=(x[i]*y[1]-x[1]*y[i])*0.5;
            printf("%.1lf
    ",s);
        }
    
    }
    

      2

    #include<stdio.h>
    int main()
    {
        int n;
        int x[100],y[100];
        double s;
        int i;
        while(scanf("%d",&n)!=EOF&&n)
        {
            s=0;
                for(i=1;i<=n;i++)
            {
                scanf("%d %d",&x[i],&y[i]);
            }
            for(i=1;i<=n-2;i++)
            {
                s+=((x[i+1]-x[1])*(y[i+2]-y[1])-(x[i+2]-x[1])*(y[i+1]-y[1]))*0.5;
    
            }
    
            printf("%.1lf
    ",s);
        }
    
    }
    

      

  • 相关阅读:
    git 强制覆盖本地
    .gitignore 配置
    Git fetch和git pull的区别
    时间函数 date strtotime
    page show
    prepare PDO
    Lucene搜索方法总结
    lucene索引日期和数字
    lucene 3.0.2 + 多文件夹微博数据(时间,微博)构建索引
    lucene 使用注意
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4107009.html
Copyright © 2011-2022 走看看