百度研发工程师面试题
2015-07-05 17:20
471 查看
C++有哪些数据类型?为什么long和int都是4字节? 数据类型有char、short、bool、int、long、float、double,long long等,并不是所有的int和long都是4字节的,在16位机中int就是2字节的,而在64位机中long是8字节的。C++中对int的长度约束是大于等于short型的长度,小于等于long型的长度,且最短长度是2字节。 long型则规定长度大于等于int型,且最短长度为4字节。 2 JAVA和C++的区别是什么?分别用在什么情景比较好? java是解释性语言,执行过程是先编译成.class字节码文件,再用JVM执行 c++是编译性语言,执行时直接编译成可供机器识别的二进制代码 因此java的速度相对c++慢 但是java支持跨平台,一次编译,处处执行 C++不支持跨平台操作 c++有指针,java没有 c++支持多重继承,java没有,但是java提出了接口,可以通过继承多个借口来实现c++多重继承的问题 移植性: C++困难,依赖机器底层实现; JAVA容易,基于JVM。 垃圾回收: C++无;JAVA有,自动回收空间。 适用场景: C++: 对于效率要求高的底层架构式系统。 JAVA: 面向对象的大规模系统, ERP, WEB等。 3 编程题:给定一个文件每一行是字符串,找出所有的逆序对,比如abc和cba是逆序的对。 [cpp] view plaincopy在CODE上查看代码片派生到我的代码片 // language : C++ #include <bits/stdc++.h> using namespace std; class Solution { public: vector<pair<string, string> > solve(vector<string> str) { vector<pair<string, string> > ret; unordered_map<string, int> Map; for(int i = 0; i < str.size(); ++i) { int tmp = Map[str[i]]; if(tmp == 0) { Map[str[i]] = 1; } if(tmp == 1) { string tmpstr = str[i]; reverse(str[i].begin(), str[i].end()); if(Map[str[i]] == 1) { ret.push_back(make_pair(tmpstr, str[i])); Map[str[i]] = Map[tmpstr] = 2; } } } } return ret; } }; 4 给定一个奇数n,比如n=3,生成1到n平方的数,如1到9,填入九宫格,使得横竖斜的和都相等。 [cpp] view plaincopy在CODE上查看代码片派生到我的代码片 /* n奇数幻方口诀: 1. 数字1放在第一行中间 2. 依次放在上一个数的右上角 2.1如果右边出去了就回到左边(3,4) 2.2 如果上面出去了就放下面(1,2) 2.3 如果右上角有了就放在这个数的下面(参考5,6) */ #include<iostream> #include<cstring> using namespace std; int map[20][20]; int main() { int n,i,j,k;; while(cin>>n) { memset(map,0,sizeof(map)); i=1; j=n/2+1; map[i][j]=1; for(k=2;k<=n*n;k++) { if(j+1<=n&&i-1>=1)//右上角 { if(map[i-1][j+1]==0) { i--; j++; } else//数没有 { i++; } } else if(j+1>n&&i-1<=0)//最右上角 { if(map [1]==0) { i=n; j=1; } else//数没有 { i++; } } else if(j+1>n) { j=1; i--; } else { i=n; j++; } map[i][j]=k; } for(i=1; i<=n; i++) { for(j=1; j<=n; j++) { cout<<map[i][j]<<" "; } cout<<endl; } } return 0; } 5 C和C++有什么区别,能用C实现C++所有功能吗?C能实现多态吗? c++是面向对象语言,c不是。c不能实现所有c++功能,比如函数重载,虚函数。c不能实现多态 C是面向过程的语言,C++是面向对象的语言,C++比C多了三大特性:继承、封装和多态。C++兼容绝大部分C的语法,理论上用C是可以实现C++的所有功能 6 逻辑题:25匹马,5条赛道,一匹马一个赛道,比赛只能得到5匹马之间的快慢程度,而不是速度,求决胜1,2,3名至少多少场。 一匹马只有跑了才能看出其速度,25匹马至少都跑了一次,最少五轮,且每轮能排出名次;由于最终只要最快的三名,顾每组只有1、2、3有意义继续比下去,4、5名直接淘汰。每组的3有意义的前提是该组的2就是总排名的2、1就是总排名的1,每组的2有意义的前提是该组的1至少第二;归根到底还是看每组第一的情况,故5个第一比一次,第一就是总的第一;第四、第五及其所在的组全部被淘汰;故第一的组的二、三名,第二的组第一、二名;第三的组的第一名比最后一次,前两名就是总的二、三名;共七轮。 a1,a2,a3,a4,a5;------>a1,a2,a3; b1,b2,b3,b4,b5;------>b1,b2,b3; c1,c2,c3,c4,c5;------>c1,c2,c3; d1,d2,d3,d4,d5;------>d1,d2,d3; e1,e2,e3,e4,e5;------>e1,e2,e3; a1,b1,c1,d1,e1;------> a1 ,b1,c1 a2,a3,b1,b3,c1;------> a2,a3 ; 7请用c++ 实现stl中的string类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能。 [cpp] view plaincopy在CODE上查看代码片派生到我的代码片 #include <utility> #include <string.h> classString { public: String():data_(newchar[1]) { *data_ = '\0'; } String(const char * str):data_(newchar[strlen(str) + 1]) { strcpy(data_, str); } String(const String & rhs) : data_(newchar[rhs.size() + 1]) { strcpy(data_, rhs.c_str()); } /* Delegate constructor in C++11 String(const String& rhs):String(rhs.data_) { } */ ~String() { delete[] data_; } /* Traditional: String& operator=(const String& rhs) { String tmp(rhs); swap(tmp); return *this; } */ String &operator=(String rhs)// yes, pass-by-value { swap(rhs); return*this; } // C++ 11 String(String &&rhs): data_(rhs.data_) { rhs.data_ = nullptr; } String &operator=(String && rhs) { swap(rhs); return*this; } // Accessors size_t size() const { return strlen(data_); } const char * c_str() const { return data_; } void swap(String & rhs) { std::swap(data_, rhs.data_); } private: char *data_; };
相关文章推荐
- 最正确的学习方法,程序员如何学习一项你之前完全不了解的新技术?
- 黑马程序员——Java基础---线程的另一个总结(10)--练习,空中网面试题总结
- 不能上网怎么解决
- 面试题37:两个链表的第一个公共结点
- 黑马程序员——Java集合框架—整理笔记
- 面试题33:把数组排成最小的数
- 面试题31:连续子数组的最大和
- 黑马程序员——引入头文件
- 黑马程序员——java基础---多线程
- 面试二叉树问题集锦
- 黑马程序员---Unix相关---常用命令
- 《程序员的修炼-培养思维潜能的9个习惯》 读书笔记
- Java并发3-多线程面试题
- 招聘初级程序员必须考虑的6个因素
- iOS面试题(3)----内存管理
- IOS面试题(2)----线程
- IOS面试题(1)----分类
- 黑马程序员——Java基础--内部类总结
- 黑马程序员——用函数实现两变量值交换
- 操作系统常见面试的一些基础知识整理