练习题(2)

检查两个点(x1,y1)和(x2,y2)是否位于给定线的同一侧
给定三个整数a,b和c,其表示线a * x + b * y -c = 0的等式的系数。给定两个整数点(x1,y1)和(x2,y2)。任务是确定点(x1,y1)和(x2,y2)是否位于给定线的同一侧。
例子:
输入: a = 1,b = 1,c = 1,x1 = 1,y1 = 1,x2 = 1,y2 = 2
输出:是
在* x +上应用(x1,y1)和(x2,y2) b * y - c,分别给出1和2两者具有相同的符号,因此两个点都位于该行的同一侧。

	输入: a = 1,b = 1,c = 1,x1 = 1,y1 = 1,x2 = 0,y2 = 0 
	输出:否
	------------------------------------------------------------------------------------------------------------
	下面这个是我写的:
public class Xyxy {

	/**
	    检查两个点(x1,y1)和(x2,y2)是否位于给定线的同一侧
		给定三个整数a,b和c,其表示线a * x + b * y -c = 0的等式的系数。给定两个整数点(x1,y1)和(x2,y2)。任务是确定点(x1,y1)和(x2,y2)是否位于给定线的同一侧。
		例子:
		输入: a = 1,b = 1,c = 1,x1 = 1,y1 = 1,x2 = 1,y2 = 2 
		输出:是
		在* x +上应用(x1,y1)和(x2,y2) b * y - c,分别给出1和2两者具有相同的符号,因此两个点都位于该行的同一侧。
		
		输入: a = 1,b = 1,c = 1,x1 = 1,y1 = 1,x2 = 0,y2 = 0 
		输出:否
	*/
	public static void main(String[] args) {
		int a = 1,b=1,c=1,x1=1,y1=1,x2=0,y2=0;
		int i1 = test(x1, y1, a, b, c);
		int i2 = test(x2, y2, a, b, c);
		//if((i1 > 0 && i2 > 0)||(i1 < 0 && i2 < 0)||(i1 == 0 && i2 == 0)){//我之前以为点都在线上也为同一侧 
		if((i1 > 0 && i2 > 0)||(i1 < 0 && i2 < 0)){
			System.out.println("是");
		}else{
			System.out.println("否");
		}
		
	
	}
	private static int test(int x ,int y,int a,int b,int c){
		int i = a * x + b * y -c;
		return i;
	}
}

网上的答案:

public class GFG1 {

	// Function to check if two points  
	// lie on the same side or not 
	static boolean pointsAreOnSameSideOfLine(int a, int b,  
	                                         int c, int x1,  
	                                         int y1, int x2,  
	                                         int y2) 
	{ 
	    int fx1; // Variable to store a * x1 + b * y1 - c 
	    int fx2; // Variable to store a * x2 + b * y2 - c 
	  
	    fx1 = a * x1 + b * y1 - c; 
	    fx2 = a * x2 + b * y2 - c; 
	  
	    // If fx1 and fx2 have same sign 
	    if ((fx1 * fx2) > 0) 
	        return true; 
	  
	    return false; 
	} 
	  
	// Driver code 
	public static void main(String[] args) 
	{ 
	    int a = 1, b = 1, c = 1; 
	    int x1 = 1, y1 = 1; 
	    int x2 = 2, y2 = 1; 
	  
	    if (pointsAreOnSameSideOfLine(a, b, c, x1, y1, x2, y2)) 
	        System.out.println("Yes"); 
	    else
	        System.out.println("No"); 
	} 
	} 
	  
	// This code is contributed by 29AjayKumar 

小知识:两个正数或者负数相乘结果一定大于0 所以我上面使用的判断//if((i1 > 0 && i2 > 0)||(i1 < 0 && i2 < 0))需要优化

本人只是为了记录自己的经历,如果侵犯到您的权益 ,请与1194821568@qq.com联系
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值