Computer >> Máy Tính >  >> Lập trình >> C ++

Kiểm tra xem nó có phải là một đường thẳng trong C ++ hay không

Giả sử chúng ta có một danh sách các điểm dữ liệu bao gồm (x, y) tọa độ, chúng ta phải kiểm tra xem các điểm dữ liệu có tạo thành đường thẳng hay không. Vì vậy, nếu các điểm giống như [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7)], thì chúng tạo thành đường thẳng .

Để giải quyết vấn đề này, chúng tôi sẽ lấy sự khác biệt giữa mỗi điểm dữ liệu liên tiếp và tìm độ dốc. Đối với người đầu tiên tìm thấy độ dốc. Đối với tất cả các điểm khác, hãy kiểm tra xem độ dốc có giống nhau hay không. nếu chúng giống nhau thì chỉ cần trả về true, ngược lại là false

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int gcd(int a, int b){
      return !b?a:gcd(b,a%b);
   }
   bool checkStraightLine(vector<vector<int>>& c) {
      bool ans =true;
      bool samex = true;
      bool samey = true;
      int a = c[1][0]-c[0][0];
      int b = c[1][1]-c[0][1];
      int cc = gcd(a,b);
      a/=cc;
      b/=cc;
      for(int i =1;i<c.size();i++){
         int x = c[i][0]-c[i-1][0];
         int y = c[i][1]-c[i-1][1];
         int z = gcd(x,y);
         x/=z;
         y/=z;
         ans =ans &&(x == a )&& (y == b );
      }
      return ans;
   }
};
main(){
Solution ob;
vector<vector<int>> c = {{1,2},{2,3},{3,4},{4,5},{5,6},{6,7}};
cout << ob.checkStraightLine(c);
}

Đầu vào

[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]]

Đầu ra

1
(1 indicates true)