#3703. 9 月 18 日代码理解
9 月 18 日代码理解
01 #include <bits/stdc++.h>
02 using namespace std;
03
04 typedef struct {
05 double x;
06 double y;
07 } Point;
08
09 Point point init(double x, double y) {
10 Point p;
11 p.x = x;
12 p.y = y;
13 return p;
14 }
15
16 Point point sub(Point a, Point b) {
17 Point p;
18 p.x = a.x - b.X;
19 p.y = a.y - b.y;
20 return p;
21 }
22
23 double cross(Point a, Point b){
24 return a.x * b.y - a.y * b.x;
25 }
26
27 double polygonArea (const vector<Point> v) {
28 double area = cross(v.back(),v.front());
29 for (size ti = 0; i < v.size() - 1; ++i) {
30 area += cross(v[i],v[i+1]);
31 }
32 return area;
33 }
34
35 void solve(int n) {
36 vector<Point> pts(n);
37 for (int i =0; i < n; ++i) {
38 double a, b;
39 cin >> a >> b;
40 pts[i] = point init(a, b);
41 }
42 double area = polygonArea(pts) / 2;
43 cout << fixed << setprecision(1) << fabs(area)<< "\n";
44 }
45
46 int main() {
47 while(true) {
48 int n;
49 cin >> n;
50 if (n == 0) break;
51 solve(n);
52 }
53 return 0;
54 }
判断题
- 将第 行改为
double area = polygonArea(pts) >> 1;
,程序正常运行。{{ select(1) }}
- √
- ×
- 无论点是按逆时针方向还是按顺时针方向给出,程序都可以计算出正确的结果。{{ select(2) }}
- √
- ×
- 程序可以处理凹多边形而不需要任何修改。{{ select(3) }}
- √
- ×
- polygonArea 的返回值始终为正。{{ select(4) }}
- √
- ×
选择题
- cross 函数的计算结果用于表示{{ select(5) }}
- 两个点的欧几里得距离
- 连接两点的直线的斜率
- 两个向量的点积
- 两个向量的又积
- 对于下面的输入,程序输出是?
-
3 1 1 0 0 1 0
{{ select(6) }}