C++笔试题

来源:互联网 发布:中文域名有必要注册吗 编辑:程序博客网 时间:2024/06/05 04:01


    今天又面试了两家公司,现在把笔试的几个题目总结一下,一来是自我总结和学习,二来是将笔试的题目与大家分享一下,说不定下一个你就遇到了同样的问题。

两道机试题:

    1.完成下面的函数,将一个八进制的数(字符串表示)转化成十进制的数,如“100”返回的结果是64要求不使用库函数。(北京轩宇信息技术)

int convert(char *str);

 

int convert(char *str);int convert(char *str){//计算字符串的长度int size = 0;while(*str != '\0'){size ++;str ++;}//计算这八进制的值,从低位往高位加int lastIndex = 0;//字符从后信前的位数int sum = 0, temp = 0;//当前位数的值str --;//上面的循环已经将str指向'\0',向前移一位while (lastIndex < size){temp = *str - '0';temp = temp << 3*lastIndex;//左移3*i位转换成10进制的值,2^3 = 8sum += temp;lastIndex ++;str --;}return sum;}

一开始,没看到不能使用库函数。如果能使用库函数这会变得更简单,我的想法是:

int convert2(char *str){int n = strlen(str);int temp = 0;int sum = 0;for (int i =0; i<n; i++){temp = str[n-i-1] - '0';sum += (int)(temp*pow(8.0, i));}return sum;}


 

    2.有一个字符串的形式如:a[]b[]c[]d,其中abcd0-9中的数字,[]+ - * /中的任意一个运算符。完成以下函数求表达式的值,不考虑括号、浮点数。如1-6/4*5,结果为-4(北京轩宇信息技术)

 

这一题做了半天做不来,我想到是应该递归可以解决,因为总是从左到右找优先级较高的运算符,最终的跳出条件是只剩下两个运算符,但不知道怎么写!就知道这个面试肯定是没希望了(因为他考的主要就是这道题,试卷上写着建议先做第二题)

这题对我还挺有挑战的,有知道解法的大夹求解!

 


    下午去了另一家公司,有两题笔试题记忆犹新:

    3.写一个函数,求出1+2+3+...+n的和。

这是不非常简单?学程序刚入门的都写出来,也许一看到你就会写出下面这样一段程序:

int accumulation(int n){if (n < 1){return -1;}else{int sum = 0;for (int i=1; i<=n; i++){sum += i;}return sum;}}

我看到这题目,一开始和大家的想法是一样的,后面一想,这不是一个等差数列吗?要用n次循环不是效率太低了吗?于是直接用一个等差数列求和公式就计算了,后面HR跟我说我做的是对的,这考的就是一种思维啊,虽然很简单,但你的思维是不是固定了?

int accumulation2(int n){if (n < 1){return -1;}else{return n*(1+n)/2;}}


    4.有一组数据,记录了一个城市每天的最高气温,请找出最近一次连续5天盖过最高气温的时间,返回对应的下标,盖过指前面连续5天都比这一天气温低。如下表中返回的是下标10

气温

32

 34

35

31

28

25

22

18

21

24

27

24

23

下标

0

1

2

3

4

5

6

7

8

9

10

11

12

我的思路就是从前往后找,标记最后一个值为最大值,如果前面5个都小于该值,返回下标;如果不到5个发现更大的值,则重新标记最大值的位置。后来HR说我这思路也是对的,看来这次笔试还不错!

代码如下:

int getHighTemperature(vector<float> tempers){vector<float>::size_type size = tempers.size();vector<float>::size_type idx = size -1, maxIdx = size-1, count = 0;while(idx >= 0){if (count == 5){break;}if (tempers[idx] > tempers[maxIdx] && count < 5){maxIdx = idx;count = 0;idx --;} else{count ++;idx --;}}return count >= 5 ? maxIdx : -1;}


 

5 0
原创粉丝点击