【笔试题】2020华为笔试
1、直角三角形个数
华为笔试:直角三角形个数
i+j+k=p, 0<i<=j<k, 通过解不等式,可以得到:i<p/3, j<p/2。
测试用例:120,3;12,1
https://www.cnblogs.com/joelwang/p/11426533.html
https://blog.csdn.net/weixin_40790474/article/details/79354757
2、矩阵相邻判断
https://www.cnblogs.com/LJ-LJ/p/11455415.html
题目描述:
一个矩阵,5*5,取相邻(二个成员有一个边是相同的)的6个,输入一个6个成员列表,判断是否满足?
矩阵成员如下:
[[1,2,3,4,5],
[11,12,13,14,15],
[21,22,23,24,25],
[31,32,33,34,35],
[41,42,43,44,45]].
输入描述:
包含6个矩阵成员数组,如:1,2,3,4,5,11以一个空格分隔,支持多行
1,2,3,4,5,11
1,2,11,14,25,15
输出描述:
满足输出1,否则输出0,每一行输入一个输出
1
0
备注:
输入没有合法判断,每个成员不重复。
思路分析:
利用并查集实现。设定一个长度为6的数组,其中每个成员单独成组,接下来判断两两是否相邻,若相邻则合并为一组。最后判断是否存在孤立的组,若有则输出0,否则输出1。
通过20%:
#include"iostream" #include"vector" #include"algorithm" using namespace std; int main() { while (cin) { vector<int> input; for (int i = 0; i < 6; ++i) { int temp; cin >> temp; input.push_back(temp); } sort(input.begin(), input.end()); if (input[5] > 45||input[0]<1)//0~45范围判断 cout << 0 << endl; int flag = 0; for (int i = 1; i < 6; ++i) { if (input[i] - input[i - 1]>1 && flag == 0) { if (input[i] - input[i - 1] != 6) { cout << 0 << endl; flag = 2; } else flag = 1; } else if (input[i] - input[i - 1]>1 && flag == 1) { cout << 0 << endl; flag++; } } if (flag == 1) cout << 1 << endl; } }
ζั͡ޓއ genji - 至此只为原地流浪.......