zoukankan      html  css  js  c++  java
  • 华为2019/04/10春招实习生笔试题

    前两题比较基础,第三题也不是很难,刚做完,记录一下,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 
     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矩阵栅格,每个栅格都有一个高程值代表海拔高度,小明从出发点到终点有几条不同路径?每次只能往更高海拔的地方去,走过的地方不能再走,只能前后左右走。

    例:输入:

    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>
     5 using namespace std;
     6 
     7 
     8 //建立一个结构体
     9 
    10 struct grid {
    11     int high = 0;
    12     //flag为0代表未到达过
    13     int arived_flag = 0;
    14 };
    15 //深度优先遍历搜索函数
    16 int DFT_result(vector<vector<grid>> map,int m,int n, int des_zuobiao[2]) {
    17     int result = 0;
    18     int M = map.size();
    19     int N = map[0].size();
    20     if (m == des_zuobiao[0] && n == des_zuobiao[1])
    21     {
    22         result++;
    23         return result;
    24     }
    25     else
    26     {
    27         //当前位置设置为已走过
    28         map[m][n].arived_flag = 1;
    29         //判断是否越界,上下左右邻接点
    30         if (m - 1 >= 0)
    31         {
    32             if (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         }
    37         if (m + 1 <= M - 1)
    38         {
    39             if (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         }
    44         if (n - 1 >= 0)
    45         {
    46             if (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         }
    51         if (n + 1 <= N - 1)
    52         {
    53             if (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 
    62     return result;
    63 }
    64 int main(){
    65     int map_M = 0;
    66     int map_N = 0;
    67     cin >> map_M;
    68     cin >> map_N;
    69 
    70     vector<vector<grid>> map;
    71     for (int i = 0; i < map_M; i++)
    72     {
    73         vector<grid> row;
    74         for (int j = 0; j < map_N; j++) {
    75             int 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 
    84     int pre_zuobiao[2];
    85     int des_zuobiao[2];
    86     cin >> pre_zuobiao[0];
    87     cin >> pre_zuobiao[1];
    88     cin >> des_zuobiao[0];
    89     cin >> des_zuobiao[1];
    90 
    91     int result = DFT_result(map, pre_zuobiao[0], pre_zuobiao[1], des_zuobiao);
    92     cout << result << endl;
    93     system("pause");
    94 }
  • 相关阅读:
    cs ip 通过jmp转移命令间接赋值。无法直接对其赋值。
    8086 cpu为什么要把段地址*16+偏移量形成物理地址呢?
    保护模式和实模式的区别
    计算机的内存是以字节为单位的, 这个认知很重要。
    计算机的内存是以字节为单位的。
    一个字 word 是16位, 一个字由两个字节组成 , 字节=byte ,一个字节8位, 位=bit 如果没有特殊说明kb 就是指 k*bit
    物理地址为20位 如10000H 用段地址*16+偏移地址表示
    深入学习Java线程池
    在线考试系统镜像构建、推送、部署
    容器 变成镜像提交到阿里云镜像仓库
  • 原文地址:https://www.cnblogs.com/lijiaxin/p/10686491.html
Copyright © 2011-2022 走看看