当前位置:   article > 正文

华为笔试题总结

华为笔试题总结

IP地址交集判断

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

输入描述:输入4个IP

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

  1. #include<iostream>
  2. #include<vector>
  3. #include<string>
  4. #include<stack>
  5. using namespace std;
  6. int main()
  7. {
  8. string s1, s2, s3, s4;
  9. cin >> s1 >> s2 >> s3 >> s4;
  10. vector<int> ret1;
  11. vector<int> ret2;
  12. vector<int> ret3;
  13. vector<int> ret4;
  14. int a1 = 0;
  15. for (int i = 0;i < s1.size();i++)
  16. {
  17. if (s1[i]!='.')
  18. {
  19. int tmp = s1[i] - '0';
  20. a1 = a1 *10+ tmp;
  21. }
  22. if(i==s1.size()-1||s1[i]=='.')
  23. {
  24. ret1.push_back(a1);
  25. a1 = 0;
  26. }
  27. }
  28. int a2 = 0;
  29. for (int i = 0;i < s2.size();i++)
  30. {
  31. if (s2[i] != '.')
  32. {
  33. int tmp = s2[i] - '0';
  34. a2 = a2 * 10 + tmp;
  35. }
  36. if (i == s2.size() - 1 || s2[i] == '.')
  37. {
  38. ret2.push_back(a2);
  39. a2 = 0;
  40. }
  41. }
  42. int a3 = 0;
  43. for (int i = 0;i < s3.size();i++)
  44. {
  45. if (s3[i] != '.')
  46. {
  47. int tmp = s3[i] - '0';
  48. a3 = a3 * 10 + tmp;
  49. }
  50. if (i == s3.size() - 1 || s3[i] == '.')
  51. {
  52. ret3.push_back(a3);
  53. a3 = 0;
  54. }
  55. }
  56. int a4 = 0;
  57. for (int i = 0;i < s4.size();i++)
  58. {
  59. if (s4[i] != '.')
  60. {
  61. int tmp = s4[i] - '0';
  62. a4 = a4 * 10 + tmp;
  63. }
  64. if (i == s4.size() - 1 || s4[i] == '.')
  65. {
  66. ret4.push_back(a4);
  67. a4 = 0;
  68. }
  69. }
  70. int count = 0;
  71. for (int i = 0;i < ret1.size();i++)
  72. {
  73. int a = ret1[i];
  74. int b = ret2[i];
  75. int c = ret3[i];
  76. int d = ret4[i];
  77. if (d<=b)
  78. {
  79. if (c >= a)
  80. {
  81. count++;
  82. }
  83. }
  84. else
  85. {
  86. if (c <= b)
  87. {
  88. count++;
  89. }
  90. }
  91. }
  92. if (count == 4)
  93. cout << "overlap IP" << endl;
  94. else
  95. cout << "NO OVERLAP" << endl;
  96. return 0;
  97. }

进制转换

写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。


输入例子1:
0xA

输出例子1:
10

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<iostream>
  3. #include<vector>
  4. #include<string>
  5. #include<stack>
  6. #include<set>
  7. #include<math.h>
  8. #include<algorithm>
  9. using namespace std;
  10. int main()
  11. {
  12. //freopen("Text.txt", "r", stdin);
  13. string str;
  14. while (cin >> str)
  15. {
  16. int len = str.size();
  17. int result=0;
  18. for (int i = len - 1;i > 1;i--)
  19. {
  20. if (str[i] >= '0'&&str[i] <= '9')
  21. {
  22. result += (str[i] - '0')*pow(16,len-i-1);
  23. }
  24. else if(str[i]>='A'&&str[i]<='F')
  25. {
  26. result += (str[i] - 55)*pow(16, len-i-1);
  27. }
  28. }
  29. cout << result << endl;
  30. }
  31. return 0;
  32. }

明明的随机数

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据,希望大家能正确处理)。

Input Param

n               输入随机数的个数

inputArray      n个随机整数组成的数组


Return Value

OutputArray    输出处理后的随机整数

注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。


输入描述:
输入多行,先输入随机整数的个数,再输入相应个数的整数


输出描述:
返回多行,处理后的结果


输入例子1:
11
10
20
40
32
67
40
20
89
300
400
15

输出例子1:
10
15
20
32
40
67
89
300
400

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<iostream>
  3. #include<vector>
  4. #include<string>
  5. #include<stack>
  6. #include<set>
  7. using namespace std;
  8. int main()
  9. {
  10. //freopen("Text.txt", "r", stdin);
  11. int n;
  12. while (cin >> n)
  13. {
  14. set<int> ret;
  15. while (n)
  16. {
  17. int a;
  18. cin >> a;
  19. ret.insert(a);
  20. n--;
  21. }
  22. for (set<int>::iterator it = ret.begin();it != ret.end();it++)
  23. {
  24. printf("%d\n", *it);
  25. }
  26. }
  27. return 0;
  28. }

汽水瓶

有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?

输入描述:
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。


输出描述:
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。


输入例子1:
3
10
81
0

输出例子1:
1
5
40

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<iostream>
  3. #include<vector>
  4. #include<string>
  5. #include<stack>
  6. using namespace std;
  7. int main()
  8. {
  9. //freopen("Text.txt", "r", stdin);
  10. int n;
  11. while (cin>>n&&n)
  12. {
  13. int ret = 0;
  14. int tmp = n;
  15. while (tmp/3>0)
  16. {
  17. int a = tmp / 3;
  18. int b = tmp % 3;
  19. ret += a;
  20. tmp =a+b==2?3:(a+b);
  21. }
  22. cout << ret << endl;
  23. }
  24. return 0;
  25. }

删数

有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。

输入描述:
每组数据为一行一个整数n(小于等于1000),为数组成员数,如果大于1000,则对a[999]进行计算。

输出描述:
一行输出最后一个被删掉的数的原始下标位置。

输入例子1:
8

输出例子1:
6

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<iostream>
  3. #include<vector>
  4. #include<string>
  5. #include<stack>
  6. #include<set>
  7. #include<math.h>
  8. #include<algorithm>
  9. using namespace std;
  10. int main()
  11. {
  12. //freopen("Text.txt", "r", stdin);
  13. int num;
  14. while(cin >> num)
  15. {
  16. vector<int> s;
  17. for (int i = 0;i < num;i++)
  18. {
  19. s.push_back(i);
  20. }
  21. int l = 3;
  22. int k = 0;
  23. int i = 0;
  24. while (1)
  25. {
  26. if (i == s.size())
  27. {
  28. i = 0;
  29. }
  30. if (s[i] != -1)
  31. {
  32. l--;
  33. }
  34. if (l == 0)
  35. {
  36. s[i] = -1;
  37. l = 3;
  38. k++;
  39. if (k == s.size())
  40. {
  41. cout << i << endl;
  42. break;
  43. }
  44. }
  45. i++;
  46. }
  47. }
  48. return 0;
  49. }

数字处理

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

(1)求出它是几位数

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

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

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

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

  1. #include<iostream>
  2. #include<vector>
  3. #include<string>
  4. #include<stack>
  5. using namespace std;
  6. int main()
  7. {
  8. string num;
  9. cin >> num;
  10. stack<char> ret;
  11. char opt = num[0];
  12. if (opt == '-') {
  13. cout << num.size() - 1 << endl;
  14. }
  15. else
  16. {
  17. cout << num.size() << endl;
  18. }
  19. for (int i = 0;i < num.size();i++)
  20. {
  21. if (num[i] == '-')
  22. {
  23. cout << num[i];
  24. }
  25. else
  26. {
  27. cout << num[i] << " ";
  28. }
  29. }
  30. cout << endl;
  31. for (int i = 0;i < num.size();i++)
  32. {
  33. if(num[i]>='0'&&num[i]<='9')
  34. ret.push(num[i]);
  35. }
  36. if (num[0] == '-')
  37. {
  38. cout << num[0];
  39. }
  40. while (!ret.empty())
  41. {
  42. char a = ret.top();
  43. cout << a << " ";
  44. ret.pop();
  45. }
  46. cout << endl;
  47. return 0;
  48. }

字符集合

输入一个字符串,求出该字符串包含的字符集合

输入描述:
每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。

输出描述:
每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出。

输入例子1:
abcqweracb

输出例子1:
abcqwer

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<iostream>
  3. #include<vector>
  4. #include<string>
  5. #include<stack>
  6. #include<set>
  7. #include<math.h>
  8. #include<algorithm>
  9. using namespace std;
  10. int main()
  11. {
  12. //freopen("Text.txt", "r", stdin);
  13. string str;
  14. while (cin >> str)
  15. {
  16. set<char> ret;
  17. vector<char> res;
  18. string result = "";
  19. for (int i = 0;i < str.size();i++)
  20. {
  21. if (ret.find(str[i]) != ret.end())
  22. {
  23. continue;
  24. }
  25. ret.insert(str[i]);
  26. res.push_back(str[i]);
  27. }
  28. for(int i=0;i<res.size();i++)
  29. {
  30. result += res[i];
  31. }
  32. cout << result << endl;
  33. }
  34. return 0;
  35. }

字节流解析

根据数值占用BIT数,按顺序从输入字节流中解析出对应数值,解析顺序按输入数组astElement索引升序;
void Decode(unsigned int uiInputLen, unsigned char aInputByte[], unsigned int uiElementNum, ELEMENT_STRU astElement[]);
unsigned int uiInputLen:字节数组(流)长度
unsigned char aInputByte:字节数组(流)
unsigned int uiElementNum:解析数值个数
ELEMENT_STRU astElement[]:数值的结构数组指针,含义如下
Struct
{
unsigned int uiElementLength; //表示uiElementValue占用BIT数,范围1~32
unsigned int uiElementValue; //从字节流中按顺序解析的数值,用于输出
}ELEMENT_STRU;

输入描述:
字节数组长度uiIutputLen为3;
字节数组aInputByte[3]为{0x62, 0x80, 0x00},对应二进制为“0110 0010, 1000 0000, 0000 0000”;
解析数值个数uiElementNum为2;
数值[0]的值占4个bit,即astElement[0].uiElementLength = 4;
数值[1]的值占5个bit,即astElement[1].uiElementLength = 5;
输出描述:
数值[0]的值为6,二进制为“0110”,即astElement[0].uiElementValue = 6;
数值[1]的值为5,二进制为“0010 1”,即astElement[1].uiElementValue = 5;

示例1
输入
3
0x62 0x80 0x00
2
4
5
输出
6
5

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <algorithm>
  4. #include<vector>
  5. #include<string>
  6. #include<sstream>
  7. #include<set>
  8. using namespace std;
  9. void HextoTwo(int num,string &ret)
  10. {
  11. int remainder;
  12. char buf[16][5] = { "0000","0001","0010","0011",\
  13. "0100","0101","0110","0111",\
  14. "1000","1001","1010","1011",\
  15. "1100","1101","1110","1111" };
  16. if (0 == num)
  17. return;
  18. remainder = num % 16;
  19. HextoTwo(num >> 4,ret);
  20. ret += buf[remainder];
  21. }
  22. int main()
  23. {
  24. //freopen("Text.txt", "r", stdin);
  25. int num;
  26. cin >> num;
  27. string ret = "";
  28. while (num)
  29. {
  30. int a;
  31. cin >> hex >> a;//以十六进制方式输入
  32. HextoTwo(a,ret);
  33. num--;
  34. }
  35. int a;
  36. cin >> a;
  37. vector<string> bit;
  38. int j = 0;
  39. while (a)
  40. {
  41. int k;
  42. cin >> k;
  43. string tmp = "";
  44. int l = j + k;
  45. for (j;j < l;j++)
  46. {
  47. tmp += ret[j];
  48. }
  49. bit.push_back(tmp);
  50. a--;
  51. }
  52. for (int i = 0;i < bit.size();i++)
  53. {
  54. string s = bit[i];
  55. int n = 0;
  56. for (int j = s.length()-1;j >= 0;j--)//二进制字符串转为十进制数
  57. {
  58. int number = s[j] - '0';
  59. n += number*pow(2, s.length()-j-1);
  60. }
  61. cout << n << endl;
  62. }
  63. return 0;
  64. }

最长数字字符串

给定一个字符串,输出字符串中最长的数字串,并把这个数字串的长度输出。

请一个在字符串中找出连续最长的数字串,并把这个串的长度返回;如果存在长度相同的连续数字串,返回最后一个连续数字串;

注意:数字串只需要是数字组成的就可以,并不要求顺序,比如数字串“1234”的长度就小于数字串“1359055”,如果没有数字,则返回空字符串(“”)而不是NULL!

输入描述:
一个字符串
输出描述:
输出最长的数字串,输出最长数字串个数;
中间以逗号(,)隔开;

示例1
输入
abcd12345ed125ss123058789
输出
123058789,9

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<vector>
  5. #include<stack>
  6. #include<string>
  7. using namespace std;
  8. bool cmp(string &a,string &b)
  9. {
  10. return a.length()>b.length();
  11. }
  12. int main()
  13. {
  14. //freopen("Text.txt","r",stdin);
  15. string str;
  16. while(cin>>str)
  17. {
  18. string ret = "";
  19. vector<string> vec;
  20. for (int i = 0;i < str.length();i++)
  21. {
  22. if (str[i] >= '0' && str[i] <= '9')
  23. {
  24. ret += str[i];
  25. if(i==str.length()-1)
  26. vec.push_back(ret);
  27. }
  28. else
  29. {
  30. if (ret.length() != 0)
  31. {
  32. vec.push_back(ret);
  33. ret.clear();
  34. }
  35. }
  36. }
  37. string result = "";
  38. sort(vec.begin(),vec.end(),cmp);
  39. int l=vec[0].length();
  40. for(int i=0;i<vec.size();i++)
  41. {
  42. if(vec[i].length()==l)
  43. result+=vec[i];
  44. }
  45. cout << result << "," << l << endl;
  46. }
  47. return 0;
  48. }

跳跃比赛

题目描述
给出一组正整数,你从第一个数向最后一个数方向跳跃,每次至少跳跃1格,每个数的值表示你从这个位置可以跳跃的最大长度。计算如何以最少的跳跃次数跳到最后一个数。

输入描述:
第一行表示有多少个数n
第二行开始依次是1到n个数,一个数一行
输出描述:
输出一行,表示最少跳跃的次数。
示例1
输入
7
2
3
2
1
2
1
5
输出
3

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<iostream>
  3. #include<sstream>
  4. #include<vector>
  5. #include<stack>
  6. #include<string>
  7. using namespace std;
  8. int main()
  9. {
  10. //freopen("Text.txt", "r", stdin);
  11. int n;
  12. cin >> n;
  13. vector<int> ret;
  14. while (n)
  15. {
  16. int l;
  17. cin >> l;
  18. ret.push_back(l);
  19. n--;
  20. }
  21. if (ret.size() < 2)
  22. cout << 0 << endl;
  23. else
  24. {
  25. int cur_max = ret[0];//当前跳跃的最大距离
  26. int pre_max = ret[0];//之前跳跃的最大距离
  27. int jump = 1;
  28. for (int i = 1;i < ret.size();i++)
  29. {
  30. if (i > cur_max)
  31. {
  32. jump++;
  33. cur_max = pre_max;
  34. }
  35. if (pre_max < i + ret[i])
  36. pre_max = i + ret[i];//更新最大达到的距离
  37. }
  38. cout << jump << endl;
  39. }
  40. return 0;
  41. }

字符串处理

输入描述:

1、忽略小数点,例如“A1.2”,认为包含整数1和2;

2、如果整数的左侧出现“-”,则奇数个数认为是负整数,偶数个数认为是正整数。例如AB-1CD--2EF---3“”,认为包含整数-1、2和-3。

输出描述:

输出即为字符串中所有整数数字之和。

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<iostream>
  3. #include<sstream>
  4. #include<vector>
  5. #include<stack>
  6. #include<string>
  7. #include<algorithm>
  8. #include<map>
  9. using namespace std;
  10. int main()
  11. {
  12. //freopen("Text.txt", "r", stdin);
  13. string str;
  14. cin >> str;
  15. int num = 0;
  16. int flag = 0;
  17. vector<int> ret;
  18. str += "a";//以a结束,减少一条结束判断语句
  19. for (int i = 0;i < str.length();i++)
  20. {
  21. if (str[i] >= '0'&&str[i] <= '9')
  22. {
  23. num += str[i] - '0';
  24. }
  25. else if (str[i] == '-')
  26. {
  27. flag = 1;
  28. continue;
  29. }
  30. else
  31. {
  32. if (num != 0)
  33. {
  34. if (flag)
  35. {
  36. num % 2 == 0 ? num = num:num = -num;
  37. }
  38. ret.push_back(num);
  39. }
  40. flag = 0;
  41. num = 0;
  42. }
  43. }
  44. int sum = 0;
  45. for (int i = 0;i < ret.size();i++)
  46. sum += ret[i];
  47. cout << sum << endl;
  48. return 0;
  49. }

 

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/919079
推荐阅读
相关标签
  

闽ICP备14008679号