Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 직선인지 확인

<시간/>

(x, y) 좌표로 구성된 데이터 포인트 목록이 있다고 가정하고 데이터 포인트가 직선을 형성하는지 여부를 확인해야 합니다. 따라서 점이 [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7)]과 같으면 직선을 형성하고 있습니다. .

이를 해결하기 위해 각 연속 데이터 포인트 간의 차이를 가져와 기울기를 찾습니다. 먼저 기울기를 찾으십시오. 다른 모든 점에 대해 기울기가 동일한지 여부를 확인합니다. 동일하면 단순히 true를 반환하고 그렇지 않으면 false를 반환합니다.

예시

더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −

#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);
}

입력

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

출력

1
(1 indicates true)