2018年华为校招面试机试题目与参考答案解析

  发布时间:2019-12-04 14:08:07   作者:crazybean   我要评论
这篇文章主要介绍了2018年华为校招面试机试题目与参考答案,涉及C++数值与字符串运算相关算法原理与操作技巧,需要的朋友可以参考下

1.数字处理

题目描述:给出一个不多于5位的整数,进行反序处理,要求

(1)求出它是几位数

(2)分别输出每一个数字(空格隔开)

(3)按逆序输出各位数字(仅数字间以空格间隔,负号与数字之间不需要间隔)

输入描述:位数不大于5的整数

输出描述:1.整数位数 2.空格间隔输出结果 3.逆序整数

#include <vector>
#include <string>
#include <iostream>
using namespace std;
int main()
{
   int iInput;
   int iNum=0;
   char* strRst="";
   int iOutput=0;
   cin >> iInput;
   int k = 0;
   int temp;
   int flag;
   int iTemp;
   if (iInput < -99999 || iInput > 99999)
       return -1;
   if (iInput < 0)
   {
       flag = -1;
       iInput = -iInput;
   }
   else
       flag = 1;
   temp = iInput;
   vector<int> resStr;
   while (temp)
   {
       ++iNum;
       iTemp = temp % 10;
       resStr.push_back(iTemp);
       iOutput = iOutput * 10 + iTemp;
       temp /= 10;
   }
   cout << iNum << endl;
   if (flag == -1)
       cout << "-";
   for (int i = iNum - 1; i >= 0; --i)
   {
       if (i == iNum - 1)
           cout << resStr[i];
       else
       {
           cout << " " << resStr[i];
       }
   }
   cout << endl;
   iOutput = flag*iOutput;
   cout << iOutput << endl;
   system("pause");
   return 0;
}

2.IP地址交集判断

题目描述:输入四个IP端,前两个为第一个IP段的起始和终止地址,后两个是第二个IP段的起始和终止地址,判断这两个IP段是否存在交集

输入描述:输入4个IP

输出描述:如果存在交集,输出 Overlap IP ; 如果不存在交集,输出 No Overlap IP

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<cassert>
using namespace std;
int *dec2bin(int decnum)
{
   int i, a, *b = { 0 };
   a = decnum;
   for (i = 7; i >= 0; i--)
   {
       b[i] = a % 2;
       a = a / 2;
   }
   return b;
}
int ipToInt(char *ipString)
{
   assert(ipString != NULL);
   int i = 0, j, n, count = 0, return_num = 0;
   char *tmp;
   int *tmp_num=NULL, *num=NULL, *d2b;
   char *s = ipString, *s_tmp=NULL;
   if (*s == '.')
       count++;
   count++;
   if (count != 4)
       return 0;
   while (*s != '\0')
   {
       if (*s != '.')
       {
           n = s - s_tmp;
           tmp = (char*)malloc(n*sizeof(char));
           memcpy(tmp, s, n);
           tmp_num[i] = atoi(tmp);
           d2b = dec2bin(tmp_num[i]);
           for (j = 0; j<8; j++)
               num[8 * i + j] = d2b[j];
           s++;
           i++;
           s_tmp = s;
       }
       s++;
   }
   if (*s = '\0')
   {
       n = s - s_tmp;
       tmp = (char*)malloc(n*sizeof(char));
       memcpy(tmp, s, n);
       tmp_num[i] = atoi(tmp);
       d2b = dec2bin(tmp_num[i]);
       for (j = 0; j<8; j++)
           num[8 * i + j] = d2b[j];
   }
   for (j = 0; j<32; j++)
       return_num = return_num * 2 + num[j];
   return return_num;
}
int main(void)
{
   char *s1, *s2, *s3, *s4;
   s1 = new char;
   s2 = new char;
   s3 = new char;
   s4 = new char;
   cin >> s1 >> s2 >> s3 >> s4;
   int n1, n2, n3, n4, i;
   n1 = ipToInt(s1);
   n2 = ipToInt(s2);
   n3 = ipToInt(s3);
   n4 = ipToInt(s4);
   if (n4<n1 || n3>n2)
       cout << "No Overlap IP" << endl;
   else
       cout << "Overlap IP" << endl;
   system("pause");
   return 0;
}

3.数字排序

题目描述: 给定字符串内有很多正整数,要求对这些正整数进行排序,然后返回排序后指定位置的正整数,排序要求:按照每一个正整数的后三位数字组成的整数进行从小到大排序(1)如果不足三位,则按照实际位数组成的整数进行比较(2)如果相等,则按照输入字符中的原始顺序排序

说明:(1)字符串以‘\0’结尾,仅包含数字、空格(2)字符串内正整数之间以单个空格分隔,字符串首尾没有空格(3)正整数格式为十进制,大小1~1000000,正整数的数字非零开始

输入描述:第一行为一个整数字符串,里面包含若干个整数,以空格分割,第二行为一个整数,即指定的位置

输出描述:输出指定位置的整数

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <string.h>
using namespace std;
int find_string(const char* input_string, int serial_number, int output_string_max_length, char* output_string)
{
   int size = strlen(input_string);
   vector<int> vec;
   int tmp = 0;
   for (size_t i = 0; i <= size; ++i){
       if (input_string[i] == ' ' || i == size){
           if (tmp == 0){
               return -1;
           }
           vec.push_back(tmp);
           tmp = 0;
       }
       else{
           tmp = tmp * 10 + input_string[i] - '0';
       }
   }
   int n = vec.size();
   for (int i = 0; i < n - 1; ++i){
       for (int j = 0; j < n - i - 1; ++j){
           if (vec[j] % 1000 > vec[j + 1] % 1000){
               swap(vec[j], vec[j + 1]);
           }
       }
   }
   if (serial_number > vec.size()){
       return -1;
   }
   char num[11];
   sprintf(num, "%d", vec[serial_number - 1]);
   int len = strlen(num);
   cout << num;
   return 0;
}
int main()
{
   string s1;
   getline(cin, s1);
   int t;
   char *input_string = const_cast<char *>(s1.data());
   int serial_number, output_string_max_length=0;
   char* output_string = NULL;
   cin >> serial_number;
   t=find_string(input_string, serial_number, output_string_max_length, output_string);
   system("pause");
   return 0;
}

相关文章

  • 华为技术岗面试初面+综合面试经验总结

    这篇文章主要介绍了华为技术岗面试初面+综合面试经验,总结整理了华为技术岗面试中初面、综合面试等环节所遇到的各种问题,并给出了相应的参考答案与建议,需要的朋友可以参考
    2019-12-03
  • 华为校招 C++岗面试经历总结【笔试+一面+二面+Offer】

    这篇文章主要介绍了华为校招 C++岗面试经历,总结分析了华为校招C++岗位的笔试题,以及一面、二面到最终拿到Offer的经历与相关经验感想,需要的朋友可以参考下
    2019-11-28
  • 华为java社招面试题目、参考答案及全部流程详解

    这篇文章主要介绍了华为java社招面试题目、参考答案及全部流程,讲述了参加华为java社招面试的全部流程、遇到的面试题目、参考答案以及相关的注意事项,需要的朋友可以参考下
    2019-10-22
  • 华为云计算电话面试与参考答案总结

    这篇文章主要介绍了华为云计算电话面试与参考答案,总结分析了华为云计算电话面试中所遇到的各种问题与相应的参考答案,包括云计算相关的常见概念、原理与考察知识点,需要的
    2019-10-12
  • 华为Java社招面试经历详解【已拿到offer】

    这篇文章主要介绍了华为Java社招面试经历,详细记录了华为java面试的流程、相关面试题与参考答案,需要的朋友可以参考下
    2019-09-17
  • 华为笔试算法面试题与参考答案分析【基于C++】

    这篇文章主要介绍了华为笔试算法面试题与参考答案,结合实例形式分析了基于C++的字符串转换、判断、排序等算法相关操作技巧,需要的朋友可以参考下
    2019-09-05
  • 华为16道经典面试题与参考思路汇总

    这篇文章主要介绍了华为16道经典面试题与参考思路,总结分析了华为面试中遇到的经典问题,并提供了相应的解答思路供读者参考,需要的朋友可以参考下
    2019-08-01
  • 据说华为的一道面试题

    这篇文章主要介绍了据说华为的一道Java面试题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-29
  • 华为面试改革加强考察编程难度大增

    面试者选择一种编程语言,两轮面试,每轮约45分钟。其中面试者编程30分钟,面试官提问与讨论15分钟。今天小编给大家讨论下华为面试改革加强考察编程难度大增,感兴趣的朋友
    2019-05-14
  • 精选11道Java技术面试题及对应答案【包含部分阿里和华为的面试题】

    这篇文章主要为大家介绍了11道Java技术面试题及对应答案,其中包含部分阿里和华为的面试题,总结分析了java常见的技术难点与java常见面试题,需要的朋友可以参考下
    2019-04-11

最新评论