1 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是逆序的对。


// 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,填入九宫格,使得横竖斜的和都相等。


/*
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类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能。




#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_;
};