【笔试题】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;
 }
}

 

posted @ 2019-09-04 02:57  ostartech  阅读(6295)  评论(0编辑  收藏  举报