当前位置: 首页 > news >正文

华为计试——刷题

判断两个IP是否属于同一子网

题目:给定一个子网掩码和两个 IP 地址,判断这两个 IP 地址是否在同一个子网中。

思路:首先,判断这个 IP 地址和子网掩码格式是否正确,不正确输出 ‘1’,进而结束;接着,判断两个 IP 地址是否是同一个子网络:若属于同一子网络输出 ‘0’;若不属于同一子网络输出 ‘2’。

子网掩码可以简单看成一串连续的 1 和一串连续的 0 拼接而成的 32 位二进制数,左边部分都是 1,右边部分都是 0。
IP地址是由 4 个 0-255 之间的整数构成的,用“.”符号相连。

def checkIP(ipLst):if len(ipLst) != 4:return Falsefor i in ipLst:if not 0 <= i <= 255:return Falsereturn True def checkMask(maskLst):# "255.255.255.0" # 若二进制全为 0 或全为 1,结果是错误的。if len(maskLst) != 4:  return False mm = ''.join(f'{part:08b}' for part in maskLst)  # 转为二进制的子网掩码return '01' not in mm and '1' in mm and '0' in mmwhile True:try:mask = list(map(int, input().split('.')))ip1 = list(map(int, input().split('.')))ip2 = list(map(int, input().split('.')))# 判断格式是否正确,竟然存在负号 -255.0.0.0if not (checkMask(mask) and checkIP(ip1) and checkIP(ip2)) or max(mask+ip1+ip2)>255 or min(mask+ip1+ip2)<0:print(1)else:m, n = [], []for i in range(len(mask)):m.append(int(mask[i]) & int(ip1[i]))n.append(int(mask[i]) & int(ip2[i]))if m == n:print(0)else:print(2)except:break

称砝码

题目:给定 n n n 种不同的砝码,重量和个数不等。求这些砝码能组成多少种不同的总重量(包括 0 0 0)。
例如,现在,有 2 2 2 个重量为 1 1 1 的砝码和有 1 1 1 个重量为 2 2 2 的砝码,它们可以称出 5 5 5 种不同的重量(0、1、2、3 和 4)。具体为,选择 1 1 1 个重量为 1 1 1 的砝码、选择 2 2 2 个重量为 1 1 1 的砝码、选择 1 1 1 个重量为 1 1 1 的砝码和选择 1 1 1 个重量为 2 2 2 的砝码,以及选择全部的砝码。

解题步骤:遍历所有的砝码,记录当前砝码在不同数量下的重量,并与之前的所得到的重量相加并去重;遍历完成后就可得到不同重量的数目:
(1)初始化结果集合 l = { 0 } l=\{0\} l={0}
(2)遍历砝码,记当前砝码的重量为 m i m_i mi,数量为 x i x_i xi。首先,从数量为 1 开始,逐渐叠加到 x i x_i xi,计算不同数量下不同的重量并存储到列表中,即 s = { k ∗ m i ∣ 0 ≤ k ≤ x i } \{k * m_i \ | \ 0 \le k \le x_i \} {kmi  0kxi};接着,将 s 与现有的 res 集合逐元素相加并去重,得到新的 res 集合,即 l = { x + y ∣ x ∈ s , y ∈ l } l = \{x+ y \ | \ x \in s, y \in l\} l={x+y  xs,yl}
(3)重复步骤(2),直到遍历完所有的砝码。最终, l l l 集合中元素的个数即为答案。

n = int(input())
weight = list(map(int, input().split(' ')))
number = list(map(int, input().split(' ')))res = [0]  # 不加 0 就不能遍历 res 列表
for i in range(n):s = [weight[i] * j for j in range(number[i] + 1)]res = list(set(x + y for x in s for y in res)) 
print(len(res))

迷宫问题

def dfs(i, j, pos=[(0, 0)]):if i + 1 == h and j + 1 == w:for p in pos:print("(" + str(p[0]) + "," + str(p[1]) + ")")if j + 1 < w and grid[i][j + 1] == 0 and (i, j + 1) not in pos:  # 向右dfs(i, j + 1, pos + [(i, j + 1)])if j - 1 >= 0 and grid[i][j - 1] == 0 and (i, j - 1) not in pos:  # 向左dfs(i, j - 1, pos + [(i, j - 1)])if i + 1 < h and grid[i + 1][j] == 0 and (i + 1, j) not in pos:  # 向上dfs(i + 1, j, pos + [(i + 1, j)])if i - 1 >= 0 and grid[i - 1][j] == 0 and (i - 1, j) not in pos:  # 向下dfs(i - 1, j, pos + [(i - 1, j)])h, w = list(map(int, input().split(" ")))  # map 返回的结果是迭代器
grid = []
for i in range(h):grid.append(list(map(int, input().split(" "))))dfs(0, 0)

相关文章:

  • LeetCode 1524. 和为奇数的子数组数目
  • 38.springboot使用rabbitmq
  • 【AUTOSAR OS】计数器Counter机制解析:定义、实现与应用
  • 注销微软账户
  • 医疗多模态共情推理与学习一体化网络构成初探
  • AppTrace 视角下 App 一键拉起:提升应用转化率的高效方案​
  • 腾讯云推出云开发AI Toolkit,国内首个面向智能编程的后端服务
  • 【Unity】AudioSource超过MaxDistance还是能听见
  • 保持本地 Git 项目副本与远程仓库完全同步
  • 利用nginx完成iframe请求的身份认证
  • kafka核心组件
  • 系统思考:化繁为简的艺术
  • lstm 长短期记忆 视频截图 kaggle示例
  • 202403-02-相似度计算 csp认证
  • 矩阵快速幂算法快速上手
  • mkcert实现本地https
  • 界面形成能的理解
  • 【android bluetooth 协议分析 03】【蓝牙扫描详解 1】【扫描关键函数 btif_dm_search_devices_evt 分析】
  • 基于大模型的数据库MCP Server设计与实现
  • 电子电器架构 --- OTA测试用例分析(上)
  • web网页设计图片/全面的seo网站优化排名
  • 一个空间怎么放两个网站/韩国比分预测
  • wordpress上传的图片不显示/seo自动排名软件
  • 网站制作心得体会200字/爱站网是什么
  • 做商城网站设计/他达拉非什么是
  • 企业为什么要建立自己的网站/长春seo快速排名