• 【华为OD:C++机试】Day-1


    目录

    🌷1. 统计监控、需要打开多少监控器:

    🌷2. 阿里巴巴找黄金宝箱:

    🌷3. 事件推送:

    🌷4. 分苹果:

    🌷5. 乱序整数序列两数之和绝对值最小:

    🌷6.卡片组成的最大数字:

    🌷7.找最小数:

    🌷8.身高排序:

    🌷9.出错的或电路:

    🌷10.磁盘容量:



    🌷1. 统计监控、需要打开多少监控器

    题目描述:

    思路:

     将地图先进行存储,遍历地图,如果是1直接++,如果是0,判断四周如果是1直接++,然后break,如果在此不break则会出现多算的情况;

     code: 

    1. // 统计监控的个数
    2. #include
    3. using namespace std;
    4. int m, n;
    5. int grid[20][20];
    6. int dx[4] = { -1, 0, 1, 0 };
    7. int dy[4] = { 0, 1, 0, -1 };
    8. int main()
    9. {
    10. // 用于存储地图
    11. cin >> m >> n;
    12. for (int i = 0; i < m; i++)
    13. {
    14. for (int j = 0; j < n; j++)
    15. {
    16. cin >> grid[i][j];
    17. }
    18. }
    19. int ans = 0;
    20. for (int row = 0; row < m; row++)
    21. {
    22. for (int col = 0; col < n; col++)
    23. {
    24. if (grid[row][col] == 1)
    25. {
    26. ans++;
    27. }
    28. else
    29. {
    30. for (int i = 0; i < 4; i++)
    31. {
    32. int x = row + dx[i];
    33. int y = col + dy[i];
    34. if (x >= 0 && x < m && y >= 0 && y < n && grid[x][y] == 1)
    35. {
    36. ans++;
    37. break;
    38. }
    39. }
    40. }
    41. }
    42. }
    43. cout << ans;
    44. return 0;
    45. }

    🌷2. 阿里巴巴找黄金宝箱:

    题目描述:

    code:

    1. // 阿里巴巴寻宝箱
    2. #include
    3. #include
    4. #include
    5. using namespace std;
    6. int main()
    7. {
    8. string str;
    9. cin >> str;
    10. int pos = 0;
    11. vector<int> v;
    12. while ((pos = str.find(',')) != str.npos)
    13. {
    14. v.push_back(stoi(str.substr(0, pos)));
    15. str.erase(0, pos + 1);
    16. }
    17. v.push_back(stoi(str));
    18. int leftsum = 0, rightsum = 0;
    19. for (auto e : v)
    20. rightsum += e;
    21. for (int i = 0; i < v.size(); i++)
    22. {
    23. rightsum -= v[i];
    24. if (leftsum == rightsum)
    25. {
    26. cout << i;
    27. return 0;
    28. }
    29. leftsum += v[i];
    30. }
    31. cout << -1;
    32. return 0;
    33. }

    🌷3. 事件推送:

    题目描述:

    code:

    1. // 事件推送
    2. #include
    3. #include
    4. using namespace std;
    5. void sloveMathod(int R, const vector<int>& a, const vector<int>& b)
    6. {
    7. int index = 0;
    8. vectorint>> list;
    9. for (int i = 0; i < a.size(); i++)
    10. {
    11. vector<int> input(2);
    12. while (index < b.size())
    13. {
    14. if (a[i] <= b[index] && b[index] - a[i] <= R)
    15. {
    16. input[0] = a[i];
    17. input[1] = b[index];
    18. list.push_back(input);
    19. break;
    20. }
    21. index++;
    22. }
    23. }
    24. for (const auto& e : list)
    25. cout << e[0] << " " << e[1] << endl;
    26. }
    27. int main()
    28. {
    29. int m, n, R;
    30. cin >> m >> n >> R;
    31. vector<int> a(m);
    32. vector<int> b(n);
    33. for (auto& e : a) cin >> e;
    34. for (auto& e : b) cin >> e;
    35. sloveMathod(R, a, b);
    36. return 0;
    37. }

    🌷4. 分苹果

    题目描述:

    code:

    1. // 分苹果
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. using namespace std;
    8. void solveMethod(string line)
    9. {
    10. // 将苹果的重量以整形的方式读入数组中
    11. stringstream ss(line);
    12. vector<int> nums;
    13. int n;
    14. while (ss >> n)
    15. {
    16. nums.push_back(n);
    17. }
    18. sort(nums.begin(), nums.end());
    19. int max_num = -1;
    20. for (int i = 1; i < nums.size() - 1; i++)
    21. {
    22. int left_bin = 0;
    23. int right_bin = 0;
    24. int left_sum = 0;
    25. int right_sum = 0;
    26. for (int j = 0; j < i; j++)
    27. {
    28. left_bin ^= nums[j];
    29. left_sum += nums[j];
    30. }
    31. for (int j = i; j < nums.size(); j++)
    32. {
    33. right_bin ^= nums[j];
    34. right_sum += nums[j];
    35. }
    36. if (left_bin == right_bin)
    37. {
    38. max_num = max(max(left_sum, max_num), right_sum);
    39. }
    40. }
    41. cout << max_num << endl;
    42. }
    43. int main()
    44. {
    45. // 读入苹果的个数
    46. int N;
    47. cin >> N;
    48. cin.ignore();
    49. // 读入各苹果的重量
    50. string line;
    51. getline(cin, line);
    52. solveMethod(line);
    53. return 0;
    54. }

    🌷5. 乱序整数序列两数之和绝对值最小:

    题目描述:

    code:

    1. // 乱序整数序列两数之和绝对值最小
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. using namespace std;
    8. void solveMethod(string line)
    9. {
    10. // 将数据全部存入之nums数组中
    11. stringstream ss(line);
    12. int n;
    13. vector<int> nums;
    14. while (ss >> n)
    15. nums.push_back(n);
    16. sort(nums.begin(), nums.end());
    17. nums.erase(unique(nums.begin(), nums.end()), nums.end());
    18. int min = INT_MAX;
    19. vector<int> ans(2);
    20. for (int i = 0; i < nums.size(); i++)
    21. {
    22. for (int j = 0; j < nums.size(); j++)
    23. {
    24. int a = nums[i];
    25. int b = nums[j];
    26. int sum = abs(a + b);
    27. if (sum < min && a != b)
    28. {
    29. min = sum;
    30. ans[0] = a;
    31. ans[1] = b;
    32. }
    33. }
    34. }
    35. if (!ans.empty())
    36. {
    37. cout << ans[0] << " " << ans[1] << " " << min << endl;
    38. }
    39. }
    40. int main()
    41. {
    42. string line;
    43. getline(cin, line);
    44. solveMethod(line);
    45. return 0;
    46. }

    🌷6.卡片组成的最大数字:

    题目描述:

    code:

    1. // 卡片组成的最大数字
    2. #include
    3. #include
    4. #include
    5. #include
    6. using namespace std;
    7. bool cmp(const string& s1, const string& s2)
    8. {
    9. return s1 + s2 > s2 + s1;
    10. }
    11. int main()
    12. {
    13. string line;
    14. getline(cin, line);
    15. // 将输入的数存储在数组nums中
    16. vector nums;
    17. string card;
    18. for (int i = 0; i < line.size(); i++)
    19. {
    20. if (line[i] == ',')
    21. {
    22. nums.push_back(card);
    23. card.clear();
    24. }
    25. else
    26. {
    27. card += line[i];
    28. }
    29. }
    30. nums.push_back(card);
    31. sort(nums.begin(), nums.end(), cmp);
    32. string ans;
    33. for (auto& s : nums)
    34. ans += s;
    35. cout << ans << endl;
    36. return 0;
    37. }

    🌷7.找最小数:

    题目描述:

    code:

    1. // 找最小数
    2. #include
    3. #include
    4. #include
    5. using namespace std;
    6. int main()
    7. {
    8. string str;
    9. cin >> str;
    10. int n;
    11. cin >> n;
    12. stack<char> st;
    13. for (int i = 0; i < str.size(); i++)
    14. {
    15. while (n > 0 && !st.empty() && st.top() > str[i])
    16. {
    17. st.pop();
    18. n--;
    19. }
    20. st.push(str[i]);
    21. }
    22. string ans;
    23. while (!st.empty())
    24. {
    25. ans = st.top() + ans;
    26. st.pop();
    27. }
    28. cout << ans << endl;
    29. return 0;
    30. }

    🌷8.身高排序:

    题目描述:

    code:

    1. // 身高排序
    2. #include
    3. #include
    4. #include
    5. using namespace std;
    6. int main()
    7. {
    8. int tall, n;
    9. cin >> tall >> n;
    10. vectorint, int>> talls(n);
    11. for (int i = 0; i < n; i++)
    12. {
    13. int t;
    14. cin >> t;
    15. talls[i] = { abs(tall - t),t };
    16. }
    17. sort(talls.begin(), talls.end());
    18. for (auto e : talls)
    19. {
    20. cout << e.second << " ";
    21. }
    22. return 0;
    23. }

    🌷9.出错的或电路:

    题目描述:

    code:

    1. // 出错的或电路
    2. #include
    3. #include
    4. using namespace std;
    5. int count_the_number(const string& str, const char& ch)
    6. {
    7. int count = 0;
    8. for (auto& e : str)
    9. {
    10. if (e == ch)
    11. count++;
    12. }
    13. return count;
    14. }
    15. int count_num(int n, const string& str1, const string& str2)
    16. {
    17. int count = 0;
    18. for (int i = 0; i < n; i++)
    19. {
    20. if (str1[i] == '1' && str2[i] == '0')
    21. count++;
    22. }
    23. return count;
    24. }
    25. int main()
    26. {
    27. int n;
    28. string str1, str2;
    29. cin >> n >> str1 >> str2;
    30. int count1 = count_the_number(str1, '1');
    31. int count2 = count_the_number(str2, '0');
    32. int count = count_num(n, str1, str2);
    33. int ans = (count1 - count) * (count2 - count) + (n - count1) * count;
    34. cout << ans << endl;
    35. return 0;
    36. }

    🌷10.磁盘容量:

    题目描述:

    code:

    1. // 磁盘容量
    2. #include
    3. #include
    4. #include
    5. #include
    6. using namespace std;
    7. int convert(const string& str)
    8. {
    9. int sum = 0;
    10. string s = str;
    11. int pos = 0;
    12. while ((pos = s.find_first_of("MGT")) != string::npos)
    13. {
    14. string substr = s.substr(0, pos);
    15. int size = stoi(substr);
    16. switch (s[pos])
    17. {
    18. case 'M':
    19. sum += size;
    20. break;
    21. case 'G':
    22. sum += size * 1024;
    23. break;
    24. case 'T':
    25. sum += size * 1024 * 1024;
    26. break;
    27. default:
    28. break;
    29. }
    30. s = s.substr(pos + 1);
    31. pos = 0;
    32. }
    33. return sum;
    34. }
    35. bool compare(const string& str1, const string& str2)
    36. {
    37. return convert(str1) < convert(str2);
    38. }
    39. int main()
    40. {
    41. int n;
    42. cin >> n;
    43. vector capacity(n);
    44. for (auto& e : capacity)
    45. cin >> e;
    46. sort(capacity.begin(), capacity.end(), compare);
    47. for (const auto& e : capacity)
    48. cout << e << endl;
    49. return 0;
    50. }

    坚持打卡!😃

  • 相关阅读:
    软考高级-系统架构师-案例分析-架构设计真题考点汇总
    Qt(C++)面试题 | 精选25项常问
    【Oracle】 instr函数与substr函数以及自制分割函数
    python 将字节字符串转换成十六进制字符串
    java中比较两个map是否相同
    k8s-实战——redis集群部署
    文件操作和IO
    Vovsoft Text Edit Plus 专业文本编辑器工具软件:简洁高效的创作利器
    树状数组及扩展
    2022前端面试题上岸手册-浏览器部分
  • 原文地址:https://blog.csdn.net/qq_52842680/article/details/133976235