首页 > 其他 > 详细

华为2019/04/10春招实习生笔试题

时间:2019-04-10 22:09:13      阅读:183      评论:0      收藏:0      [点我收藏+]

前两题比较基础,第三题是拔高题,刚做完,记录一下,第三题没有通过,时间不够了(太菜了~~~~)

第一题:

输入的字符串超过8个字符的,按8个截一段,最后不足8个的补0到8个

最后将重新得到的字符串按升序排列

输入描述:输入一个数字N ,N个字符串 ,中间以空格隔开

输出描述:排序后的字符串

例:输入:2  abc 123456789    输出: 12345678 90000000 abc00000

 

 1 #include<iostream>
 2 #include<string>
 3 #include<vector>
 4 
 5 using namespace std;
 6 
 7 int main() {
 8     int num;
 9     while (cin >> num)
10     {
11         //vector<string> str_array;
12         vector<string> str_array_new;
13         for (int i = 0; i < num; i++) {
14             string str;
15             cin >> str;
16             //str_array.push_back(str);
17             while (str.length() > 8)
18             {
19                 string str_temp(str.begin(), str.begin() + 8);
20                 str_array_new.push_back(str_temp);
21                 str.erase(str.begin(),str.begin() + 8);
22             }
23             while (str.length() < 8)
24             {
25                 str.push_back(0);
26             }
27             str_array_new.push_back(str); 
28         }
29         int length = str_array_new.size();
30         for (int i = 0;  i < length; i++)
31         {
32             for (int j = i + 1 ; j < length; j++)
33             {
34                 if (str_array_new[j][0] < str_array_new[i][0]) {
35                     string temp = str_array_new[i];
36                     str_array_new[i] = str_array_new[j];
37                     str_array_new[j] = temp;
38                 }
39             }
40         }
41         for (int i = 0; i < length; i++)
42         {
43             cout << str_array_new[i] <<  ;
44         }
45         cout << endl;
46     }
47 
48     system("pause");
49     return 0;
50 }

第二题:

题目描述:输入一个字符串,含有括号(大括号,小括号,中括号),数字和字母,数字(n)之后必跟一个括号(测试用例里的括号都是匹配的),代表括号内的字符串重复(n)次。括号里可以有嵌套,即括号里含有括号。现在将输入的字符串逆序展开;

输入描述:字符串,例:abc3(A)

输出描述:字符串,例:AAAcba

 1 #include<iostream>
 2 #include<string>
 3 #include<vector>
 4 #include<algorithm>
 5 
 6 using namespace  std;
 7 
 8 int have_kuohao(string str) {
 9     for (int i = 0; i < str.length(); i++)
10     {
11         if (str[i] == ( || str[i] == [ || str[i] == {)
12         {
13             return 1;
14         }
15         
16     }
17     return 0;
18 }
19 int main()
20 {
21     string str;
22     while (cin >> str)
23     {
24         //括号嵌套问题
25         //没有括号直接输出
26         if (have_kuohao(str) == 0)
27         {
28             reverse(str.begin(),str.end());
29             cout << str << endl;
30             continue;
31         }
32         else
33         {
34             //
35             while (have_kuohao(str))
36             {
37                 int left;
38                 int right;
39                 for (int i = 0; i < str.length(); i++)
40                 {
41                     if (str[i] == ( || str[i] == [ || str[i] == {)
42                     {
43                         left = i;
44                     }
45                     if (str[i] == ) || str[i] == ] || str[i] == })
46                     {
47                         right = i;
48                         break;
49                     }
50                 }
51                 //展开插入
52                 int times = (int)(str[left - 1] - 0);
53                 string temp_str(str.begin() + left + 1, str.begin() + right);
54                 //在右括号后插入
55                 int insert_end = right;
56                 for (int i = 0; i < times - 1; i++)
57                 {
58                     for (int j = 0; j < temp_str.length(); j++)
59                     {
60                         str.insert(str.begin() + insert_end + 1, temp_str[j]);
61                         //cout << str << endl;
62                         insert_end ++;
63                     }
64                 }
65                 //删除括号和数字
66                 str.erase(str.begin() + right);
67                 str.erase(str.begin() + left);
68                 str.erase(str.begin() + left - 1 );
69             }
70             reverse(str.begin(), str.end());
71             //倒序输出
72             cout << str <<endl;
73         }
74     }
75 
76 
77     system("pause");
78     return 0;
79 }

第三题:时间不够了,没写出来

题目描述:

输入一个N*M矩阵栅格,每个栅格都有一个高程值代表海拔高度,小明从出发点到终点有几条不同路径?每次只能往更高海拔的地方去,走过的地方不能再走,只能前后左右走。

例:输入:

4 5

0 1 0 0

0 2 3 3

0 3 0 0

0 4 5 6

0 7 6 0

0 1 4 1

第一行代表M*N,网格大小

后面是M*N的矩阵

最后一行前两个数字代表 起始坐标,后面两个数字代表 目的坐标(坐标从左上角(0,0)开始)。

输出 :2

即两条不同路径

解法:待更新~~~~~

华为2019/04/10春招实习生笔试题

原文:https://www.cnblogs.com/lijiaxin/p/10686491.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!