检查它是否在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)