Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตรวจสอบว่าเป็นเส้นตรงใน C++ . หรือไม่


สมมติว่าเรามีรายการ data-points ที่ประกอบด้วยพิกัด (x, y) เราต้องตรวจสอบว่า data-points อยู่ในแนวเส้นตรงหรือไม่ ดังนั้นหากจุดต่างๆ เช่น [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7)] ก็จะกลายเป็นเส้นตรง .

ในการแก้ปัญหานี้ เราจะนำความแตกต่างระหว่างจุดข้อมูลแต่ละจุดที่อยู่ติดกัน และหาความชัน สำหรับอันแรก ให้หาความชัน สำหรับจุดอื่นๆ ให้ตรวจสอบว่าความชันเท่ากันหรือไม่ หากเหมือนกันก็ให้คืนค่า จริง มิฉะนั้น เท็จ

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

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