当前位置:   article > 正文

2023华为od机试C卷【找出作弊的人】C++ 实现

2023华为od机试C卷【找出作弊的人】C++ 实现

目录

题目

思路

Code


题目

公司组织了一次考试,现在考试结果出来了,想看一下有没人存在作弊行为,但是员工太多了,需要先对员工进行一次过滤,再进一步确定是否存在作弊行为。
过滤的规则为:找到分差最小的员工ID对(p1,p2)列表,要求p1<p2
员工个数,取值范国:0<n<100000
员工ID为整数,取值范围:0<=n<=100000
考试成绩为整数,取值范围:0<=score<=300
输入描述
员工的ID及考试分数
输出描述
分差最小的员工ID对(p1,p2)列表,要求p1<p2。每一行代表一个集合,每个集合内的员工ID按顺序排列,多行结果也以员工对中p1值大小升序排列(如果p1相同则p2升序)。

示例1:
输入:

5
1 90
2 91
3 95
4 96
5 100
输出:
1 2
3 4
说明:
输入: 第一行为员工个数n,后续的n行第一个数值为员工ID,第二个数值为员工考试分数输出:员工1和员工2的分差为1,员工3和员工4的分差也为1,因此最终结果为
1 2
3 4

示例2:

输入:
5
1 90
2 91
3 92
4 85
5 86
输出:
1 2
2 3
4 5

思路

1:第一步,对所有的分数进行排序,找到最小的分差。

2:第二步,对排序后的所有员工分数进行统计,满足最小分差,则输出。

3:也算是个简单了,考的还是经典的自定义排序。

Code

  1. #include<iostream>
  2. #include<vector>
  3. #include<stdlib.h>
  4. #include<algorithm>
  5. #include<string.h>
  6. #include<exception>
  7. #include<map>
  8. #include<cmath>
  9. #include<unordered_map>
  10. #include<numeric>
  11. #include<set>
  12. #include<climits>
  13. #include<ctype.h>
  14. #include<queue>
  15. #include<stack>
  16. #include<list>
  17. #include<bitset>
  18. #include <regex>
  19. using namespace std;
  20. vector<int> split(string params_str) {
  21. vector<int> p;
  22. while (params_str.find(" ") != string::npos) {
  23. int found = params_str.find(" ");
  24. p.push_back(stoi(params_str.substr(0, found)));
  25. params_str = params_str.substr(found + 1);
  26. }
  27. p.push_back(stoi(params_str));
  28. return p;
  29. }
  30. vector<string> split_str(string params_str) {
  31. vector<string> p;
  32. while (params_str.find(",") != string::npos) {
  33. int found = params_str.find(",");
  34. p.push_back(params_str.substr(0, found));
  35. params_str = params_str.substr(found + 1);
  36. }
  37. p.push_back(params_str);
  38. return p;
  39. }
  40. bool comp(vector<int> a, vector<int> b){
  41. return a[1] < b[1];
  42. }
  43. bool comp1(vector<int> a, vector<int> b){
  44. return a[0] < b[0];
  45. }
  46. int main()
  47. {
  48. int count;
  49. cin >> count;
  50. vector<vector<int>> all_employee;
  51. vector<vector<int>> pairs;
  52. //最大差就是300
  53. int min_val = 300;
  54. for(int i=0; i<count; i++){
  55. int a,b;
  56. cin >> a >> b;
  57. vector<int> temp;
  58. temp.push_back(a);
  59. temp.push_back(b);
  60. all_employee.push_back(temp);
  61. }
  62. //按照分数
  63. sort(all_employee.begin(), all_employee.end(), comp);
  64. int i=1;
  65. while(true){
  66. if(i>=count){
  67. sort(pairs.begin(), pairs.end(), comp1);
  68. string output_str = "";
  69. for (int j=0;j<pairs.size();j++){
  70. cout<<pairs[j][0] << " " << pairs[j][1] <<endl;
  71. }
  72. break;
  73. } else {
  74. int temp = all_employee[i][1] - all_employee[i-1][1];
  75. if(min_val>temp){
  76. min_val = temp;
  77. pairs.clear();
  78. vector<int> new_vec;
  79. new_vec.push_back(all_employee[i-1][0]);
  80. new_vec.push_back(all_employee[i][0]);
  81. pairs.push_back(new_vec);
  82. } else if(min_val == temp){
  83. vector<int> new_vec;
  84. new_vec.push_back(all_employee[i-1][0]);
  85. new_vec.push_back(all_employee[i][0]);
  86. pairs.push_back(new_vec);
  87. } else {
  88. min_val = min_val;
  89. }
  90. }
  91. i+=1;
  92. }
  93. return 0;
  94. }

【华为od机试真题Python+JS+Java合集】【超值优惠】:Py/JS/Java合集

【华为od机试真题Python】:Python真题题库

【华为od机试真题JavaScript】:JavaScript真题题库

【华为od机试真题Java】:Java真题题库

【华为od机试真题C++】:C++真题题库

【华为od机试真题C语言】:C语言真题题库

【华为od面试手撕代码题库】:面试手撕代码题库

【华为od机试面试交流群:830285880】

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/215494
推荐阅读
相关标签
  

闽ICP备14008679号