原題傳送門
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代表取得數字,值代表是否已經輸出...