程序员面试金典: 9.7位操作 7.3判定直角坐标系上两直线是否相交

来源:互联网 发布:网页在线客服源码 编辑:程序博客网 时间:2024/05/29 16:59
#include <iostream>#include <stdio.h>#include <math.h>using namespace std;/*问题:给定直角坐标系上的两条直线,确定这两条线会不会相交。分析:该问题有模糊地方,需要向面试官确认。       1、特殊情况:如果两条线是相同的,认为是相交的。  2、可以自己设计线的数据结构输入:3(第一条线的斜率) -2(第一条线的y轴截距) 3(第二条线的斜率) -1(第二条线的y轴截距)2 1 2 1输出:no(如果不相交,输出no;否则,输出yes)yes关键:1 题目并不难,有些面试官故意出的题目条件不清晰,需要询问,考察你是否注重交流2 注意考虑题目的特殊情况:两条线一样,认为相交3 尽量自己设置数据结构,展示面向对象能力*/typedef struct Line{Line(double slope , double yIntersecpt):_slope(slope),_yIntercept(yIntersecpt){}double _slope;//斜率,注意为浮点数double _yIntercept;//y轴斜距}Line;bool isIntersected(Line& line1 , Line& line2){double precision = 1e-6;if(fabs(line1._slope - line2._slope) > precision ) //判断浮点数是否相等{return true;}else{//如果为同一条直线,相交if( fabs(line1._yIntercept - line2._yIntercept) <= precision ){return true;}else{return false;}}}void process(){double slope1;double slope2;double yIntersect1;double yIntersect2;while(cin >> slope1 >> yIntersect1 >> slope2 >> yIntersect2){Line line1(slope1 , yIntersect1);Line line2(slope2 , yIntersect2);bool intersected = isIntersected(line1 , line2);if(intersected){cout << "yes" << endl;}else{cout << "no" << endl;}}}int main(int argc, char* argv[]){process();getchar();return 0;}

0 0
原创粉丝点击