牛客華為機試HJ39

2022-10-10 04:24:11 字數 1642 閱讀 7279

原題傳送門

1、思路

把ip全轉換為32bit 字串,模擬與運算。

2、實現

import sys

if sys.platform != "linux":

file_in = open("input/hj39.txt")

sys.stdin = file_in

"""若ip位址或子網掩碼格式非法則輸出1,若ip1與ip2屬於同一子網路輸出0,若ip1與ip2不屬於同一子網路輸出2。

"""def is_valid_ip(s):

if ".." in s:

return false

for x in list(map(int, s.split("."))):

if x < 0 or x > 255:

return false

return true

def is_valid_mask(mask):

if not is_valid_ip(mask):

return false

mask_bin = ip2bin(mask)

if '0' not in mask_bin or '1' not in mask_bin or '01' in mask_bin:

return false

return true

def int2bin(n):

n_bin = bin(n).replace("0b", "")

return f''

def ip2bin(s):

nums = list(map(int, s.split(".")))

return "".join([int2bin(x) for x in nums])

def solve(ip1, ip2, mask):

if not is_valid_ip(ip1) or not is_valid_ip(ip2) or not is_valid_mask(mask):

print(1)

return

ip1_bin = ip2bin(ip1)

ip2_bin = ip2bin(ip2)

mask_bin = ip2bin(mask)

for i in range(32):

if mask_bin[i] == '0':

continue

if ip1_bin[i] != ip2_bin[i]:

print(2)

return

print(0)

while true:

try:

mask = input().strip()

ip1 = input().strip()

ip2 = input().strip()

solve(ip1, ip2, mask)

except:

break

牛客華為機試HJ1

原題傳送門 1 思路分析 思路1 用空格去切,取切完的最後乙個字串長度即可。思路2 從後往前遍歷,直到遇到空格退出迴圈,設找到的第1個空白字元下標為start,s.length 1 start即為所求。示例 遍歷可得start 5,s.length 1 start 14 1 5 8。2 實現 j a...

牛客 華為機試(1)

題目一 正整數a和正整數b 的最小公倍數是指 能被a和b整除的最小的正整數值,設計乙個演算法,求輸入a和b的最小公倍數。方法一 讓a與b中較大的數乘以1,2,如果可以整除較小的數,則輸出。include using namespace std intmain for int i 1 i b i re...

牛客網 華為機試 009

輸入乙個int型整數,按照從右向左的閱讀順序,返回乙個不含重複數字的新的整數。輸入描述 輸入乙個int型整數 輸出描述 按照從右向左的閱讀順序,返回乙個不含重複數字的新的整數 示例1 9876673 37689 思路 維護乙個陣列或者vector長度為10,下標0 9代表取得數字,值代表是否已經輸出...