coreBugZJ

此 blog 已弃。

EOJ 1127 多边形面积(计算几何)

 1/*
 2EOJ 1127 多边形面积(计算几何)
 3
 4
 5----问题描述:
 6
 7“改革春风吹满地,
 8  不会算法没关系,
 9  实在不行回老家,
10  还有一亩三分地。
11  谢谢!(乐队奏乐)”
12
13话说部分学生心态极好,每天就知道游戏,这次考试如此简单的题目,也是云里雾里,而且,还竟然来这么几句打油诗。
14好呀,老师的责任就是帮你解决问题,既然想种田,那就分你一块。
15这是一块多边形形状的田,原本是Partychen的,现在就准备送给你了。不过,任何事情都没有那么简单,你必须首先告诉我这块地到底有多少面积,如果回答正确才能真正得到这块地。
16发愁了吧?就是要让你知道,种地也是需要算法知识的!以后还是好好练吧
17
18
19----输入:
20
21输入数据包含多个测试实例,
22每个测试实例占一行,每行的开始是一个整数n(3<=n<=100),它表示多边形的边数(当然也是顶点数),
23然后是按照逆时针顺序给出的n个顶点的坐标(x1, y1, x2, y2 xn, yn),为了简化问题,这里的所有坐标都用整数表示。
24输入数据中所有的整数都在32位整数范围内,n=0表示数据的结束,不做处理。
25
26
27----输出:
28
29对于每个测试实例,请输出对应的多边形面积,结果精确到小数点后一位小数。
30每个实例的输出占一行。
31
32
33----样例输入:
34
353 0 0 1 0 0 1
364 1 0 0 1 -1 0 0 -1
370
38
39
40----样例输出:
41
420.5
432.0
44
45
46----分析:
47
48有向面积。
49
50
51*/

52
53
54#include <stdio.h>
55
56#define  L  103
57
58int x[ L ], y[ L ], n;
59
60double area() {
61        double s = 0;
62        int i;
63        for ( i = 0; i < n; ++i ) {
64                s += x[ i ] * y[ i + 1 ] - x[ i + 1 ] * y[ i ];
65        }

66        return s / 2;
67}

68
69int main() {
70        int i;
71        while ( ( scanf( "%d"&n ) == 1 ) && ( n != 0 ) ) {
72                for ( i = 0; i < n; ++i )
73                        scanf( "%d%d", x + i, y + i );
74                x[ n ] = x[ 0 ];
75                y[ n ] = y[ 0 ];
76                printf( "%0.1lf\n", area() );
77        }

78        return 0;
79}

80

posted on 2012-05-13 22:51 coreBugZJ 阅读(797) 评论(0)  编辑 收藏 引用 所属分类: ACMAlgorithm课内作业


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理