第三次的面试的 笔试题目
1.题目:有一个字符串表示一个路径,该字符串由操作字符和坐标点构成。
需要设计和编写代码,去解析字符串,获取每一个节点的属性,可以将每一个操作符和对应的点的信息看成一个节点,存放在 node 类中(见参考)。一个 Path 类存放所有的节点,这些所有节点就组成一个路径。
打印输出路径的属性。
操作字符(不区分大小写):
- M = moveto
- L = lineto
- H = horizontal lineto
- V = vertical lineto
- C = curveto
- Q = quadratic Bézier curve
- Z = closepath
//没必要了解具体操作字符的含义,只需要记录操作符,并且输出与之对应的单词
例子1:
字符串:M150 0 L75 200 L225 200 Z
上面的例子定义了一条路径,它开始于位置150 0,到达位置75 200,然后从那里开始到225 200,最后在150 0关闭路径。
输入:
“M150 0 L75 200 L225 200 Z”
输出:
moveto:(150, 0)
lineto:(75, 200)
lineto: (225, 200)
2.算法;
1.c++ 类的模式
2. 暴力算法
3.代码:
暴力代码:
#include<bits/stdc++.h>
using namespace std;
//暴力破解版
char M[] ="moveto : ";
char L[] ="lineto : ";
char H[] ="horizontal lineto : ";
char V[] ="vertical lineto : ";
char C[] ="curveto : ";
char Q[] ="quadratic Bezier curve : ";
char Z[] ="closepath : ";
//M 100 350 L 150 -300M 250 50 L 150 300M 175 200 L 150 0M 100 350 q 150 -300 300 0
int main()
{char a[10000];gets(a);int a1=strlen(a);//获取 字符串的长度 //cout<<a1;int i=0; //记录遍历的节点 while(i<a1){if(a[i]==' '){i++;continue;}if(a[i]=='M'){i++;//下一个字符 if(a[i]==' '){i++;}cout<<M;cout<<"("; while(48<=a[i]&& a[i]<=57 &&i<a1 || a[i]=='.' ||a[i]=='-' ) //保证数字的提取 {cout<<a[i]; i++; } i++;//跨过中间的空格 cout<<",";while(48<=a[i]&& a[i]<=57 &&i<a1 || a[i]=='.' ||a[i]=='-' ) //保证数字的提取 {cout<<a[i]; i++; } cout<<")"<<endl; }else if(a[i]=='L'){i++;//下一个字符 if(a[i]==' '){i++;} cout<<L;cout<<"("; while(48<=a[i]&& a[i]<=57 &&i<a1 || a[i]=='.' ||a[i]=='-' ) //保证数字的提取 {cout<<a[i]; i++;} i++;//跨过中间的空格 cout<<",";while(48<=a[i]&& a[i]<=57 &&i<a1 || a[i]=='.' ||a[i]=='-' ) //保证数字的提取 {cout<<a[i]; i++; } cout<<")"<<endl; }else if(a[i]=='H'){i++;//下一个字符 if(a[i]==' '){i++;}cout<<H;cout<<"("; while(48<=a[i]&& a[i]<=57 &&i<a1 || a[i]=='.'||a[i]=='-' ) //保证数字的提取 {cout<<a[i]; i++; } i++;//跨过中间的空格 cout<<",";while(48<=a[i]&& a[i]<=57 &&i<a1 || a[i]=='.' ||a[i]=='-' ) //保证数字的提取 {cout<<a[i]; i++; } cout<<")"<<endl; }else if(a[i]=='V'){i++;//下一个字符 if(a[i]==' '){i++;} cout<<V;cout<<"("; while(48<=a[i]&& a[i]<=57 &&i<a1 || a[i]=='.' ||a[i]=='-' ) //保证数字的提取 {cout<<a[i]; i++; } i++;//跨过中间的空格 cout<<",";while(48<=a[i]&& a[i]<=57 &&i<a1 || a[i]=='.' ||a[i]=='-' ) //保证数字的提取 {cout<<a[i]; i++; } cout<<")"<<endl; }else if(a[i]=='C'){i++;//下一个字符 if(a[i]==' '){i++;}cout<<C;cout<<"("; while(48<=a[i]&& a[i]<=57 &&i<a1 || a[i]=='.' ||a[i]=='-' ) //保证数字的提取 {cout<<a[i]; i++; } i++;//跨过中间的空格 cout<<",";while(48<=a[i]&& a[i]<=57 &&i<a1 || a[i]=='.' ||a[i]=='-' ) //保证数字的提取 {cout<<a[i]; i++; } cout<<")"<<endl; }else if(a[i]=='Q' || a[i]=='q'){i++;//下一个字符 if(a[i]==' '){i++;}cout<<Q;cout<<"("; while(48<=a[i]&& a[i]<=57 &&i<a1 || a[i]=='.' ||a[i]=='-' ) //保证数字的提取 {cout<<a[i]; i++; } i++;//跨过中间的空格 cout<<",";while(48<=a[i]&& a[i]<=57 &&i<a1 || a[i]=='.' ||a[i]=='-' ) //保证数字的提取 {cout<<a[i]; i++; } cout<<")"; cout<<" , ";i++;//跨过中间的空格 cout<<"("; while(48<=a[i]&& a[i]<=57 &&i<a1 || a[i]=='.' ||a[i]=='-' ) //保证数字的提取 {cout<<a[i]; i++; } i++;//跨过中间的空格 cout<<",";while(48<=a[i]&& a[i]<=57 &&i<a1 || a[i]=='.' ||a[i]=='-' ) //保证数字的提取 {cout<<a[i]; i++; } cout<<")"<<endl; }else if(a[i]=='Z'){return 0; }}return 0;
}
C++ 类的模板代码:
#include<bits/stdc++.h>
using namespace std;
char M[] ="moveto";
char L[] ="lineto";
char H[] ="horizontal lineto";
char V[] ="vertical lineto";
char C[] ="curveto";
char Q[] ="quadratic Bezier curve";
char Z[] ="closepath";enum class OperateType //枚举类
{M=1,L,H,V,C,Q,Z
};OperateType return_type(char c)
{if(c=='M'|| c=='m'){return static_cast<OperateType>(1);}if(c=='L'|| c=='l'){return static_cast<OperateType>(2);}if(c=='H'|| c=='h'){return static_cast<OperateType>(3);}if(c=='V'|| c=='v'){return static_cast<OperateType>(4);}if(c=='C'|| c=='c'){return static_cast<OperateType>(5);}if(c=='Q'|| c=='q'){return static_cast<OperateType>(6);}
}//一个点的类
class Point{
public:Point();//类内 定义 类外实现 无参构造Point(float a1,float a2,OperateType type);//类内 定义 类外实现 有参构造 //拷贝构造不需要 , void set_x(float a);//类内 定义 类外实现 给 x 赋值 void set_y(float a);//类内 定义 类外实现 给 y 赋值void set_x1(float a);//类内 定义 类外实现 给 x1 赋值 void set_y1(float a);//类内 定义 类外实现 给 y1 赋值void set_type(OperateType a);//类内 定义 类外实现 给 type 赋值 float get_x();//类内 定义 类外实现 获取 x 的值 float get_y();//类内 定义 类外实现 获取 y 的值 float get_x1();//类内 定义 类外实现 获取 x 的值 float get_y1();//类内 定义 类外实现 获取 y 的值 OperateType get_type();//类内 定义 类外实现 获取 type 的值 void print();//节点打印函数 private: //私有成员 float x,y;//两个坐标 float x1=0;//备用 Q float y1=0;//备用 Q OperateType type;
};Point::Point()// 无参构造
{this->x=0;this->y=0;
}
Point::Point(float a1,float a2,OperateType aa)//有参构造
{this->x=a1;this->y=a2; this->type=aa;
}
void Point::set_x(float a)//给 x 赋值
{this->x=a;
}
void Point::set_y(float a)// 给 y 赋值
{this->y=a;
}
void Point::set_type(OperateType a)//类内 定义 类外实现 给 type 赋值
{this->type=a;
}
void Point::set_x1(float a)//类内 定义 类外实现 给 x1 赋值
{this->x1=a;
}
void Point::set_y1(float a)//类内 定义 类外实现 给 y1 赋值
{this->y1=a;
}
float Point::get_x()// 获取 x 的值
{return this->x;
}
float Point::get_y()// 获取 y 的值
{return this->y;
}
float Point::get_x1()// 获取 x1 的值
{return this->x1;
}
float Point::get_y1()// 获取 y1 的值
{return this->y1;
}
OperateType Point::get_type()//类内 定义 类外实现 获取 type 的值
{return this->type;
}
void Point::print()//节点打印函数
{if(type==static_cast<OperateType>(1))//输出 type == M 的字符串 {cout<<M;cout<<" : " << "(" <<(this->get_x()) << "," << (this->get_y()) <<")"<<endl; }else if(type==static_cast<OperateType>(2)){cout<<L;cout<<" : " << "(" <<(this->get_x()) << "," << (this->get_y()) <<")"<<endl; }else if(type==static_cast<OperateType>(3)){cout<<H;cout<<" : " << "(" <<(this->get_x()) << "," << (this->get_y()) <<")"<<endl; }else if(type==static_cast<OperateType>(4)){cout<<V;cout<<" : " << "(" <<(this->get_x()) << "," << (this->get_y()) <<")"<<endl; }else if(type==static_cast<OperateType>(5)){cout<<C;cout<<" : " << "(" <<(this->get_x()) << "," << (this->get_y()) <<")"<<endl; }else if(type==static_cast<OperateType>(6)){cout<<Q;cout<<" : " << "(" <<(this->get_x()) << "," << (this->get_y()) <<")"<<" , "<<"(" <<(this->get_x1()) << "," << (this->get_y1())<< ")"<<endl; }else if(type==static_cast<OperateType>(7)){}} class Path{
public:Path();//无参构造 Path(vector<Point>a);//有参构造 void print1();//打印函数 void add_nodes(Point a);//添加节点
private:vector<Point>nodes;
};
Path::Path()//无参构造
{}
Path::Path(vector<Point>a)//有参构造
{this->nodes=a;
}
void Path::print1()//打印函数
{vector<Point>::iterator it;for(it=nodes.begin();it!=nodes.end(); it++)//it++ 遍历下一个{it->print();}
}
void Path::add_nodes(Point a)//在动态数组里面 添加元素 添加到最后面
{nodes.push_back(a);
}//字符串读取 数字函数
float get_number(char * W,const int n)//W 字符串数组 , n 位置
{int gg=n;//记录位置 int hh=1;//小数的位置 int num= strlen(W); //获取字符串的长度 防止内存泄露int fuhao=0; // 判断 数字的正负 0 正数 1 负数float sum=0; //返回的数字 int sum1=0; //数字整数部分float sum2=0;//数值 小数部分 if(W[gg]=='-'){fuhao=1;//负数gg++; }while(48<=W[gg]&&W[gg]<=57 || W[gg]=='.'){if(W[gg]=='.')//有小数 进入小数模式 {while(48<=W[gg]&&W[gg]<=57){float a= W[gg++]-48;for(int j=1;j<=hh;j++){a=a*0.1; }hh++;sum2=sum2+a; }sum=sum1+sum2;if(fuhao==1){sum=sum*(-1);}return sum;}else{sum1=sum1*10+ W[gg]-48;gg++;}}if(fuhao==1){sum1=(-1)*sum1; } return sum1;
} void add_node(char * W,Path &a)//节点添加函数
{int i=0;int n=strlen(W);//cout<<"字符串长度:"<<n<<endl;i=0;//遍历的节点数值 while(i<n){if(W[i]>65)//有字符 { char kkkk=W[i]; if(W[i]=='Q' || W[i]=='q'){i++;//下一位 if(W[i]==' ')//假如有空格 ,跳过 {i++;}float f1=get_number(W,i);//获取第1个数字 i++;while(W[i]!=' ')//找到空格 {i++; }i++;//下一个数字float f2=get_number(W,i);//获取第2个数字 i++;while(W[i]!=' ')//找到空格 {i++; }i++;//下一个数字float f3=get_number(W,i);//获取第 3个数i++;while(W[i]!=' ')//找到空格 {i++; }i++;//下一个数字float f4=get_number(W,i);//获取第 4个数i++; Point * aaa= new Point(f1,f2,return_type(kkkk));aaa->set_x1(f3);aaa->set_y1(f4);a.add_nodes(*aaa); }else if(W[i]=='Z' || W[i]=='z'){i++;}else{i++;//下一位 if(W[i]==' ')//假如有空格 ,跳过 {i++;}float f1=get_number(W,i);//获取第1个数字 i++;while(W[i]!=' ')//找到空格 {i++; }i++;//下一个数字float f2=get_number(W,i);//获取第2个数字 Point * aaa= new Point(f1,f2,return_type(kkkk));a.add_nodes(*aaa);} }else//跳过 {i++;continue; } }
}//M150 0 L75 200 L255 200 Z
int main()
{char W[10000];gets(W);Path a;add_node(W,a);a.print1();}
第三次的面试的 笔试题目相关推荐
- C/C++面试、笔试题目(二)
4. static有什么用途?(请至少说明两种) 1,在函数中定义的STATIC变量在函数重复调用时维持其值不变,不在执行此变量的初始化代码. 2可以定义一个作用郁为当前文件的变量. 2, 7. ...
- linux常用shell命令面试,shell经典笔试题目总结
shell经典笔试题目总结 守望者整理了一些高手的博客记录的shell面试题分享给大家,有些比较有意思,帮助大家面试或则学习shell编程的学习例子 一 文件内容如下: 100 a 1 ...
- android长虹面试题,长虹电子面试笔试题目
[长虹电子面试笔试题目] 1.你平时休闲经常去的地方 A.郊外2分 B.电影院 3分 C.公园5分 D.商场10分 E.酒吧15分 F.练歌房20分 2.你更喜欢吃那种水果? A. 草莓2分 B.苹果 ...
- C#与.NET程序员面试宝典 1.4.3 笔试(举例微软、雅虎笔试题目)
笔试主要考察应聘者掌握基础知识的扎实程度,以及解决问题的思考方式.笔试是程序员应聘过程中最关键的.也是难度最大的一个环节.在激烈的求职竞争中,想顺利漂亮地完成笔试题目.躲过面试官布下的种种" ...
- 程序员面试笔试宝典学习记录(一)(常见面试笔试题目)
摘选著名的互联网企业的面试笔试真题: 1.extern的作用 自己理解:应该需要区分extern在C语言中和C++语言中的作用,C语言中extern声明的函数和变量可以被该文件外部模块引用,C++语言 ...
- 优酷土豆java面试_优酷土豆校园招聘Java开发类笔试题目
先总体说下题型,共有20道选择题,4道简答题,3道编程题和1道扩展题,题目都比较简单,限时一小时完成, 一.选择题 选择题非常简单,都是基础题,什么死锁发生的条件.HashMap和HashSet查找插 ...
- linux高级运维笔试简答题及答案,企业linux初级和高级运维面试常问题目问答总结技巧讲解(2020年录制)...
课程增值: 课程是我最近面试辅导的所有学员,成功找到工作,企业常问题目,我带领大家学习,面试如何问答. 我曾经经历面试linux运维没有做大量准备,经历大量hr给我说的一句话就是 回家等通知吧,心碎了 ...
- php简单选择题,PHP面试笔试题目选择题
导读:PHP是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域.以下是由小编J.L为您整理推荐的笔试题目和笔试经验,欢迎参考阅读. 1.以 ...
- tcl c语言笔试题,TCL技术类笔试题目.doc
TCL技术类笔试题目 模拟电路试题 一.二极管 1.如图所示电路中,已知电源电压 E=4V 时,I=1mA.那么当电源电压 E=8V 时 , 电流I的大小将是______ 2.稳压管通常工作于____ ...
最新文章
- 疫情之危,和两类无人车落地之机 | 创新工场“疫情后”系列分享
- C++ int转string的几种方法比较
- 微型计算机突然断电什么信息全部都是,微型计算机的硬件组成阶段作业(函授2014春).doc...
- 【项目管理】风险分析
- Design pattern
- 解题:ZJOI 2006 书架
- docker 打包新镜像原有配置丢失_Docker简介与安装
- MFC中给对话框重绘边框
- go语言项目实战1:-正则表达式,文件读取的综合使用
- 使用jQuery实现网页技术(无数据库)
- sql server添加列
- ikm java_ikm(IKM在线)
- php pager,fleaphp常用方法分页之Pager使用方法
- 企业资源计划——ERP
- 浅析HashMap底层原理
- Unicode(全世界每个国家字符的唯一编码0x000000 到 0x10FFFF)与UTF-8的区别
- fprintf函数matlab,fprintf函数的运用(组图)
- 台式电脑计算机里的共享网络,如何实现笔记本和台式机两台电脑共享上网
- 一文教你用 Neo4j 快速构建明星关系图谱
- js代码格式化(js代码格式化html标签)
热门文章
- python装在固态还是机械_手把手教你使用SSD(新手必看)
- 万能js时间日期格式转换
- qt5 textedit怎么改变鼠标响应_聊聊鼠标的前世今生
- html css fontfamily,CSS font-family 属性
- 基础研究与国家目标——国家重点基础研究发展计划[转自科学社]
- 光伏并网pscad_不对称故障下两级式光伏逆变器的LVRT策略
- EXP-00091 Exporting questionable statistics.
- [从零开始]用python制作识图翻译器·一
- [HIMCM暑期班]第3课:一个博弈问题
- 高三学生凭神经网络论文研究网络暴力!00后也要出道了?