2021/1/18练习

题目
在一个 XY 坐标系中有一些点,我们用数组 coordinates 来分别记录它们的坐标,其中 coordinates[i] = [x, y] 表示横坐标为 x、纵坐标为 y 的点。

请你来判断,这些点是否在该坐标系中属于同一条直线上,是则返回 true,否则请返回 false。

在这里插入图片描述
在这里插入图片描述
注意事项
1.本题思路并不复杂,但是计算过程中要注意首先被除数不能是0,其次int类型在除法运算中会取整,而float类型又经常失去精度,所以使用乘法来代替一般思路中的除法计算.
2.用斜率来判断点是否在一条直线上,设三点坐标分别为(x1,y1)(x2,y2)(x3,y3),那么斜率相等就等价于
(x2-x1)(y3-y2)=(x3-x2)(x2-x1)

 public boolean checkStraightLine(int[][] coordinates) {
    
    
	int len = coordinates.length;

        for (int i = 1; i < len - 1; ++i) {
    
    
            int y1 = coordinates[i][1] -coordinates[i-1][1];
            int x1 = coordinates[i][0] -coordinates[i-1][0];
            int y2 = coordinates[i+1][1] -coordinates[i][1];         
            int x2 = coordinates[i+1][0] -coordinates[i][0];
            if (y1*x2 != y2*x1) {
    
    
                return false;
            }
            
        }
        return true;

    }
	}

下面是用来获取二维数组的main方法

public static void main(string[]args){
    
    
	Scanner scan=new Scanner(System.in);
	System.out.println("请输入二维数组的行数"int row=scan.nextInt;
	System.out.println("请输入二维数组的列数"int col=scan.nextInt;
	int[][] coordinates=new [row][col];
	System.out.println("请输入二维数组的值"for(int i=0;i<row;i++){
    
    
	for(int j=0;j<col;j++)
	coordinates[row][col]=scan.nextInt();
	solution sol=new solution();
	sol.checkStraightLine(coordinates);
	}

猜你喜欢

转载自blog.csdn.net/weixin_45771602/article/details/112795196