EOJ 1127 多邊形面積(計算幾何)
1
/*
2
EOJ 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
35
3 0 0 1 0 0 1
36
4 1 0 0 1 -1 0 0 -1
37
0
38
39
40
----樣例輸出:
41
42
0.5
43
2.0
44
45
46
----分析:
47
48
有向面積。
49
50
51
*/
52
53
54
#include <stdio.h>
55
56
#define L 103
57
58
int x[ L ], y[ L ], n;
59
60
double 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
69
int 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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16


17

18

19

20

21

22

23


24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

posted on 2012-05-13 22:51 coreBugZJ 閱讀(854) 評論(0) 編輯 收藏 引用 所屬分類: ACM 、Algorithm 、課內作業