华为机试题刷题总结

虚幻大学 虚幻 400℃ 0评论

Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475
总体来说,最近一年的题,难易程度简单偏中等。

题总共分为五大类,分别是字符,排序,查找,算法题,其中二叉树单独拿出来考的

难易程度:百分之80属于简单题的范畴,剩下的属于运气题——————————。

一.字符串

经常考的题有:(字符串比较,字符串拼接,字符串排序,是否为公共子串,字符串翻转,字符串重排;)

字符串类的题就直接用map函数就行,剩下的百分之2.5的题用for循环输出结果就可以;

二.排序类

经常考的题有:(K个字母组合,问第几个字符或者数字,小朋友按照身高体重排序;)

三.查找类

经常考的题有:(查找中位数,小朋友查找身高体重;)

四.算法题(BFS,DFS;)

经常考的题有:(对角线上人数,迷宫,最优规划,背包问题;)

上面是几类高频的考试内容,以下是考试常用的几个函数 ****

1.getline 函数,此函数可读取整行,包括前导和嵌入的空格,并将其存储在字符串对象中。

当 cin 读取数据时,一旦它接触到第一个非空格字符即开始阅读,当它读取到下一个空白字符时,它将停止读取。

getline(cin, inputLine);   举例: getline(cin, name);

2.sort函数,包含在头文件为#include的c++标准库中,调用标准库里的排序方法可以实现对数据的排序。

void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp); 
#include
#include
using namespace std;
bool cmp(int a,int b);
main(){
  //sort函数第三个参数自己定义,实现从大到小
  int a[]={45,12,34,77,90,11,2,4,5,55};
  sort(a,a+10,cmp);
  for(int i=0;i<10;i++)
    cout<" ";
}
//自定义函数
bool cmp(int a,int b){
  return a>b;
}

3.substr函数,返回一个string,包含s中从pos开始的n个字符的拷贝(pos的默认值是0,n的默认值是s.size() - pos,即不加参数会默认拷贝整个s)

#include
#include
using` `namespace` `std;
int` `main()
{
  string s(``"12345asdf"``);
  string a = s.substr(0,5);   ``//获得字符串s中从第0位开始的长度为5的字符串
  cout << a << endl;
}

4.atoi函数,转化的是char[],c++标准库中字符串转化为int的函数。

int i_dec = std::stoi (str_dec,&sz);  
int i_hex = std::stoi (str_hex,nullptr,16);  
int i_bin = std::stoi (str_bin,nullptr,2);  
int i_auto = std::stoi (str_auto,nullptr,0);   
std::cout << str_dec << ": " << i_dec << " and [" << str_dec.substr(sz) << "]\n";  
std::cout << str_hex << ": " << i_hex << '\n';  
std::cout << str_bin << ": " << i_bin << '\n';  
std::cout << str_auto << ": " << i_auto << '\n'

5.c_str()。标准库的string类成员函数,从一个string得到c类型的字符数组

#include 
//需要包含cstring的字符串
#include 
using namespace std;

int main()
{
    //string-->char*
    //c\_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同

    //这个数组的数据是临时的,当有一个改变这些数据的成员函数被调用后,其中的数据就会失效。
    //因此要么现用先转换,要么把它的数据复制到用户自己可以管理的内存中
    const char *c;
    string s = "1234";
    c = s.c_str();
    cout<endl;
 s = "abcde";
 cout<endl;
}

6.sscanf,sscanf()函数用于从字符串中读取指定格式的数据, int sscanf (char *str, char * format [, argument, ...]);参数str为要读取数据的字符串;format为用户指定的格式;argument为变量,用来保存读取到的数据。

成功则返回参数数目,失败则返回-1,错误原因存于errno 中。

sscanf()会将参数str 的字符串根据参数format(格式化字符串)来转换并格式化数据(格式化字符串请参考scanf()), 转换后的结果存于对应的变量中。

sscanf()与scanf()类似,都是用于输入的,只是scanf()以键盘(stdin)为输入源,sscanf()以固定字符串为输入源。

#include 
int main(void)
{
    char str[100] ="123568qwerSDDAE";
    char lowercase[100];
    int num;
    sscanf(str,"%d %[a-z]", &num, lowercase);
    printf("The number is: %d.\n", num);
    printf("The lowercase is: %s.", lowercase);
    return 0;
}

常考的遍历方法:

dfs和bfs

递归和动态规划的区别

相同点:
递归与动态规划是两个十分基本的算法,它们使用的思路都是分而治之,将一个大问题拆解成一个小问题。

不同点:
1.递归是从上而下(从大问题到小问题),而动态规划是由下而上(先解决小问题最后到大问题);
2.动态规划会储存每个小问题的结果,从而它的计算速度会比递归要快。(代价是动态规划的空间复杂度更高,即用空间换取的时间)。
3.动态规划是用递归实现的,递归是用函数实现的。

————————————分割线—————————————

需要学习知识点的题

5.写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。

#include
using namespace std;
int main(){
    string a;
    while(getline(cin,a)){
        int res=0;
        int pos=a.find('x');
        for(int i=pos+1;iint tmp=0;
 if(a[i]>='A'&&a[i]<='F'){
 tmp=10+(a[i]-'A');
 }
 else{
 tmp=a[i]-'0';
 }
 res=res*16+tmp;
 }
 cout<endl;
 }
 return 0;
}

需要知道十进制转为十六进制的原理:十六进制数从低位到高位(即从右往左)计算,第0位的权值是16的0次方,第1位的权值是16的1次方,第2位的权值是16的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。

  十六进制就是逢16进1,十六进制的16个数为0123456789ABCDEF。

  例:将十六进制的(2B)H转换为十进制的步骤如下:

\1. 第0位 B x 16^0 = 11;

\2. 第1位 2 x 16^1 = 32;

\3. 读数,把结果值相加,11+32=43,即(2B)H=(43)D。

具体其他进制相互转换,请看大神博客:

https://blog.csdn.net/gaizai/p/4233780.html#_labelConvert13

转载请注明:虚坏叔叔 » 华为机试题刷题总结

喜欢 (0)

您必须 登录 才能发表评论!