没想到双非coder这次能在车300笔试中依靠算法储备给了我面试
之前在有的笔试ak了,只会加快发感谢信的速度
Hr甩给我一套压缩包链接,打开一看:
牛客看看大家建不建议写,果然有人觉得麻烦不写。果然我能有面试是别人觉得麻烦不写了…
下面只给伪代码思路:
提到了多边形。那就直接点、线、面三个基本类,然后重构方法即可
//精度判断
int sgn(double x){
}
//定义点
struct Point{
double x,y;
Point(){}
Point(double _x,double _y){ x = _x; y = _y; }
//重构运算法法实现减法、点积、叉积...
//例:
bool operator < (Point b)const{
return sgn(x-b.x)== 0?sgn(y-b.y)<0:x<b.x;
}
//返回两点的距离
double distance(Point p){
}
}
struct Line{
Point s,e;
Line(){}
Line(Point _s,Point _e){
s = _s;
e = _e;
}
//也是叉积 点积的实现
...
// 点在线段上的判断 叉积为 0,且点积小于等于
bool Pointtoseg(Point p){
}
}
struct polygon{
int n;
Point p[maxp];
Line l[maxp];
//自定义cmp排序规则
struct cmp{
};
//进行极角排序
//首先需要找到最左下角的点
//需要重载号好 Point 的 < 操作符 (min 函数要用)
void norm(){
}
// 将相邻点与点直接成线
void getline(){
}
//核心方法:判断点在多边形哪里 ;采用射线法
//奇数次相交,则在形内; 偶数次相交,则在形外
// 3 点上
// 2 边上
// 1 内部
// 0 外部
int relationpoint(Point q){
...
}
注
:
nohup java -jar car_300.jar &