华为OD机试分享(6-25)

第一题:正方形的数量
给定N个坐标,问这些坐标能够组成的正方形的数量(垂直的向量内积为0)
思路是写一个判断,对四个坐标进行全排列,然后没个坐标求四个边是否相等以及四个边两两内积为0
再对所有的坐标进行组合,输出正方形的数量。逻辑没问题,就是超时了,只过了34%
from itertools import permutations,combinations  def judgesquers(arr): # arr是一个二维数组    y = permutations(arr, 4)
      flag = 0    for i in y:
        k = list(i)
        AB = [k[1][0] - k[0][0], k[1][1] - k[0][1]]
        BC = [k[2][0] - k[1][0], k[2][1] - k[1][1]]
        CD = [k[3][0] - k[2][0], k[3][1] - k[2][1]]
        DA = [k[3][0] - k[0][0], k[3][1] - k[0][1]]
        o = AB[0]**2 + AB[1]**2    p = BC[0]**2 + BC[1]**2    q = CD[0]**2 + CD[1]**2    r = DA[0]**2 + DA[1]**2    t = AB[0]*BC[0] + AB[1]*BC[1]
        u = BC[0]*CD[0] + BC[1]*CD[1]
        v = CD[0]*DA[0] + CD[1]*DA[1]
        w = AB[0]*DA[0] + AB[1]*DA[1]     if o == p == q == r and t == u == v == w == 0:
            flag += 1    
      break  else:
            flag += 0     if flag == 1:  return True  else:  return False   def squercount():
    n = int(input())
    res = []  while n:     try:
          s = input()  if s != "":
            res.append(list(map(int, s.split())))  except EOFError:  break  if len(res) < 4:  print(0)  else:
        t = combinations(res,4)
        cnt = 0    for j in t:
            x = list(j)  if judgesquers(x):
                cnt += 1    print(cnt) 

第二题:黑板上N个数需要涂色,要求每种颜色最小的整数可以被同种颜色其他整数整除,问最少需要几种颜色,这个比较简单,100%通过
def func(): n = int(input())
    res = list(map(int, input().split()))
    res.sort()
    cnt = 1    while res:
        start = res.pop(0)
        tmp = res.copy()  for i in range(len(tmp)):  if tmp[i] % start == 0:
                res.remove(tmp[i])  if len(res) > 0:
                cnt += 1 print(cnt)
第三题:解密犯罪时间
警察在侦破一个案件时,得到了线人给出的可能犯罪时间,形如 “HH:MM” 表示的时刻。

根据警察和线人的约定,为了隐蔽,该时间是修改过的,解密规则为:利用当前出现过的数字,构造下一个距离当前时间最近的时刻,则该时间为可能的犯罪时间。每个出现数字都可以被无限次使用。"
"输入描述:
形如HH:SS的字符串,表示原始输入
输出描述:
形如HH:SS的字符串,表示推理出来的犯罪时间
示例1
输入              输出
18:52            18:55
说明
利用数字1, 8, 5, 2构造出来的最近时刻是18:55,是3分钟之后。结果不是18:51因为这个时刻是23小时59分钟之后。
示例2
输入            输出
23:59          22:22
说明
利用数字2, 3, 5, 9构造出来的最近时刻是22:22。 答案一定是第二天的某一时刻,所以选择可构造的最小时刻为犯罪时间。
备注:
1,可以保证线人给定的字符串一定是合法的。例如,“01:35” 和 “11:08” 是合法的,“1:35” 和 “11:8” 是不合法的。

2,最近的时刻有可能在第二天
考试的时候没啥思路,就想着把时间和分钟列举来,本来以为能通过个20%就不错了 ,没想到随便列举了下通过了55%的用例,也算是意外,代码很丑,就不贴了

#华为od#
全部评论
约面试了吗
点赞 回复 分享
发布于 2022-06-27 14:50
你好,请问考试的时候能在自己电脑的pycharm上调试吗?
点赞 回复 分享
发布于 2022-07-01 16:37
感谢楼主分享,赶紧还是有难度的啊
点赞 回复 分享
发布于 2022-06-26 17:47

相关推荐

黑皮白袜臭脚体育生:简历统一按使用了什么技术实现了什么功能解决了什么问题或提升了什么性能指标来写会更好另外宣传下自己的开源仿b站微服务项目,GitHub已经410star,牛客上有完整文档教程,如果觉得有帮助的话可以点个小星星,蟹蟹
点赞 评论 收藏
分享
评论
3
20
分享

创作者周榜

更多
牛客网
牛客企业服务