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