华为20190410春招实习⽣笔试题
前两题⽐较基础,第三题也不是很难,刚做完,记录⼀下,04/13更新第三题做法
————————————————————————————————
第⼀题:
输⼊的字符串超过8个字符的,按8个截⼀段,最后不⾜8个的补0到8个
最后将重新得到的字符串按升序排列
输⼊描述:输⼊⼀个数字N ,N个字符串,中间以空格隔开
输出描述:排序后的字符串
例:输⼊:2 abc 123456789 输出: 12345678 90000000 abc00000
1 #include<iostream>
2 #include<string>
3 #include<vector>
4
5using namespace std;
6
7int main() {
8int num;
9while (cin >> num)
10 {
11//vector<string> str_array;
12 vector<string> str_array_new;
13for (int i = 0; i < num; i++) {
14string str;
15 cin >> str;
16//str_array.push_back(str);
17while (str.length() > 8)
18 {
19string str_temp(str.begin(), str.begin() + 8);
20 str_array_new.push_back(str_temp);
21 ase(str.begin(),str.begin() + 8);
22 }
23while (str.length() < 8)
24 {
25 str.push_back('0');
26 }
27 str_array_new.push_back(str);
28 }
29int length = str_array_new.size();
30for (int i = 0; i < length; i++)
31 {
32for (int j = i + 1 ; j < length; j++)
33 {
34if (str_array_new[j][0] < str_array_new[i][0]) {
35string temp = str_array_new[i];
36 str_array_new[i] = str_array_new[j];
37 str_array_new[j] = temp;
38 }
39 }
40 }
41for (int i = 0; i < length; i++)
42 {
43 cout << str_array_new[i] << '';
44 }
45 cout << endl;
46 }
47
48 system("pause");
49return0;
50 }
第⼆题:
题⽬描述:输⼊⼀个字符串,含有括号(⼤括号,⼩括号,中括号),数字和字母,数字(n)之后必跟⼀个括号(测试⽤例⾥的括号都是匹配的),代表括号内的字符串重复(n)次。括号⾥可以有嵌套,即括号⾥含有括号。现在将输⼊的字符串逆序展开;
输⼊描述:字符串,例:abc3(A)
输出描述:字符串,例:AAAcba
1 #include<iostream>
2 #include<string>
3 #include<vector>
4 #include<algorithm>
5
6using namespace std;
7
8int have_kuohao(string str) {
9for (int i = 0; i < str.length(); i++)
10 {
11if (str[i] == '(' || str[i] == '[' || str[i] == '{')
12 {
13return1;
14 }
15
16 }
17return0;
18 }
19int main()
20 {
21string str;
22while (cin >> str)
23 {
24//括号嵌套问题
25//没有括号直接输出
26if (have_kuohao(str) == 0)
27 {
28 reverse(str.begin(),d());
29 cout << str << endl;
30continue;
31 }
32else
33 {
34//
35while (have_kuohao(str))
36 {
37int left;
38int right;
39for (int i = 0; i < str.length(); i++)
40 {
41if (str[i] == '(' || str[i] == '[' || str[i] == '{')
42 {
43 left = i;
44 }
45if (str[i] == ')' || str[i] == ']' || str[i] == '}')
46 {
47 right = i;
48break;
49 }
50 }
51//展开插⼊
52int times = (int)(str[left - 1] - '0');
53string temp_str(str.begin() + left + 1, str.begin() + right); 54//在右括号后插⼊
55int insert_end = right;
56for (int i = 0; i < times - 1; i++)
57 {
58for (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 ase(str.begin() + right);
67 ase(str.begin() + left);
68 ase(str.begin() + left - 1 );
69 }
70 reverse(str.begin(), d());
71//倒序输出
72 cout << str <<endl;
73 }
74 }
75
76
77 system("pause");
78return0;
79 }
第三题:时间不够了,没写出来
题⽬描述:
输⼊⼀个N*M矩阵栅格,每个栅格都有⼀个⾼程值代表海拔⾼度,⼩明从出发点到终点有⼏条不同路径?每次只能往更⾼海拔的地⽅去,⾛过的地⽅不能再⾛,只能前后左右⾛。
例:输⼊:
5 4
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
即两条不同路径
解法:
1 #include<iostream>
2 #include<string>
3 #include<vector>
4 #include<stack>
5using namespace std;
6
7
8//建⽴⼀个结构体
9
10struct grid {
11int high = 0;
12//flag为0代表未到达过
13int arived_flag = 0;
14 };
15//深度优先遍历搜索函数
16int DFT_result(vector<vector<grid>> map,int m,int n, int des_zuobiao[2]) {
17int result = 0;
18int M = map.size();
19int N = map[0].size();
20if (m == des_zuobiao[0] && n == des_zuobiao[1])
21 {
22 result++;
23return result;
24 }
25else
26 {
27//当前位置设置为已⾛过
28 map[m][n].arived_flag = 1;
29//判断是否越界,上下左右邻接点
30if (m - 1 >= 0)
31 {
32if (map[m - 1][n].arived_flag != 1 && map[m - 1][n].high > map[m][n].high)
33 {
34 result += DFT_result(map, m - 1, n, des_zuobiao);
35 }
36 }
37if (m + 1 <= M - 1)
38 {
39if (map[m + 1][n].arived_flag != 1 && map[m + 1][n].high > map[m][n].high)
40 {
41 result += DFT_result(map, m + 1, n, des_zuobiao);
42 }
43 }
44if (n - 1 >= 0)
45 {
字符串长度17模式串长度846if (map[m][n - 1].arived_flag != 1 && map[m][n - 1].high > map[m][n].high)
47 {
48 result += DFT_result(map, m, n - 1, des_zuobiao);
49 }
50 }
51if (n + 1 <= N - 1)
52 {
53if (map[m][n + 1].arived_flag != 1 && map[m][n + 1].high > map[m][n].high)
54 {
55 result += DFT_result(map, m, n + 1, des_zuobiao);
56 }
57 }
58
59 }
60
61
62return result;
63 }
64int main(){
65int map_M = 0;
66int map_N = 0;
67 cin >> map_M;
68 cin >> map_N;
69
70 vector<vector<grid>> map;
71for (int i = 0; i < map_M; i++)
72 {
73 vector<grid> row;
74for (int j = 0; j < map_N; j++) {
75int high = 0;
76 cin >> high;
77 grid grid_temp{ high, 0 };
78 row.push_back(grid_temp);
79//cin >> map[map_M][map_N];
80 }
81 map.push_back(row);
82 }
83
84int pre_zuobiao[2];
85int des_zuobiao[2];
86 cin >> pre_zuobiao[0];
87 cin >> pre_zuobiao[1];
88 cin >> des_zuobiao[0];
89 cin >> des_zuobiao[1];
90
91int result = DFT_result(map, pre_zuobiao[0], pre_zuobiao[1], des_zuobiao);
92 cout << result << endl;
93 system("pause");
94 }
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论