[55]数三角形-拼多多2018秋

2018-11-08  本文已影响15人  jdzhangxin

1.题目描述

给出平面上的 n 个点,现在需要你求出,在这 n 个点里选 3 个点能构成一个三角形的方案有几种。

2.题目解析

穷举法
如何遍历数组中不重复的三点?

如果三点不共线, 就可以构成三角形
判断三点是否共线:两条线段斜率是否相等?(x1-x2)*(y1-y3) = (y1-y2)*(x1-x3)

3.参考答案

#include <cstdio>
using namespace std;
struct Point {
  int x;
  int y;
};

int main() {
  int n;
  scanf("%d", &n);
  
  Point a[n];
  for (int i = 0; i < n; ++i) {
    scanf("%d %d", &a[i].x, &a[i].y);
  }
  int res = 0;
  for (int i = 0; i < n; ++i) {// 遍历第一个点
    for (int j = i + 1; j < n; ++j) { // 遍历第二个点
      for (int k = j + 1; k < n; ++k) { // 遍历第三个点
        // 判断是否共线
        if ((a[j].x - a[i].x) * (a[k].y - a[i].y) !=
            (a[k].x - a[i].x) * (a[j].y - a[i].y)) {
          ++res;
        }
      }
    }
  }
  printf("%d\n", res);
}

牛客题目

上一篇下一篇

猜你喜欢

热点阅读