本文主要是介绍华为OD上机考试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、寻找身高相近的小朋友
#include <iostream>
#include <bits/stdc++.h>using namespace std;//寻找身高相近的小朋友//输入,第一行两个整数,分别是小明身高,其他小伙伴个数,第二行是其他小伙伴的身高
//100 10
//95 96 97 98 99 101 102 103 104 105//输出,和小明身高差绝对值小的前面,差值大的排后面,差值相同个子小的排在前面
//99 101 98 102 97 103 96 104 95 105int h, n;
struct node{int height;
}a[128];
bool cmp(node A, node B){if (abs(A.height - h) !=abs(B.height - h)){return abs(A.height- h) < abs(B.height - h);}return A.height < B.height;
}int main() {cin >> h >> n;for (int i = 0; i < n; ++i) {cin >> a[i].height;}sort(a, a+n ,cmp);for (int i = 0; i <n ; ++i) {cout << a[i].height << " ";}return 0;
}
2、用连续自然数之和来表达整数
#include <iostream>
#include <vector>using namespace std;//用连续自然数之和来表达整数
//输入一个整数 9
//输出表达式和表达式个数
//9=9
//9=4+5
//9=2+3+4
//Result:3bool isContinune(vector<int> v){for (int i = v.size() -1; i > 0; --i) {if (v[i] != v[i-1] -1)return false;}return true;
}
int sum(vector<int> v)
{int sum = 0;for (int i : v)sum += i;return sum;
}
void print(vector<int> v, int n)
{cout << n << "=";if (v.size() == 1) {cout << v[0] << endl;return;}int i;for ( i = v.size() - 1; i > 0; --i)cout << v[i] << "+";cout << v[i] << endl;}
int main()
{int n;int sumcount = 0;vector<int> v;cin >> n;for (int i = n; i >=1; --i){for (int j = i; j >=1 ; --j) {v.push_back(j);if (sum(v) == n && isContinune(v)) {print(v, n);++sumcount;v.clear();break;}if (sum(v) > n) {v.clear();break;}}}cout << "Result:" << sumcount;
}
这篇关于华为OD上机考试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!