百度研发工程师面试题

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[n][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_;  
};  

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值