华为OD试题七(IPv4地址转换成整数、比赛的冠亚季军)

1. IPv4地址转换成整数

华为OD试题七(IPv4地址转换成整数、比赛的冠亚季军)_第1张图片
示例代码:

#测试数据
s1 = "100#101#1#5"

def fun(s):
	s_list = s.split("#")
	# 转化成十六进制数 左边补零
	s_16_list = [hex(int(_))[2:].zfill(2) for _ in s_list]
	s_16_str = ''.join(s_16_list)
	return int(s_16_str,16)
r = fun(s1)
print(r)

2. 比赛的冠亚季军

题目描述:
有N(3<=N<10000)个运动员,他们的id为0到N-1,他们的实力由一组整数表示。	
他们之间进行比赛,需要决出冠亚军。比赛的规则是0号和1号比赛,2号和3号比
赛,以此类推,每一轮,相邻的运动员进行比赛,获胜的进入下一轮;实力值大的
获胜,实力值相等的情况,id小的情况下获胜;,轮空的直接进入下一轮.
输入描述:
输入一行N个数字代表N的运动员的实力值(0<=实力值<=10000000000)。
输出描述:
输出冠亚军的id,用空格隔开。
示例1
输入:2 3 4 5
输出:3  1 2

示例代码:

# 核心 : 冠亚季军 是从四个元素中 决策出来的,因此 只需要逼近四个元素即可

# 测试数据
s = [2,3,4,5,6,7,8,9]

# 两两比较 迭代出新列表
def fun1(s_list):
	res = []
	cur = 0
	while cur < len(s_list):
		a_index,a_value = s_list[cur].split(":")
		b_index,b_value = s_list[cur+1].split(":")
		if str(a_value) >= str(b_value):
			ele = s_list[cur]
		else:
			ele = s_list[cur + 1]
		res.append(ele)
		cur += 2
	return res

def fun(s):
	
	res = []
	tmp = [ "{}:{}".format(str(index),str(value)) for index,value enumerate(s)]
	# 找出最后的四个元素
	while len(tmp) > 4:
		tmp = fun1(tmp)

	# 以下 从 四个元素中找出 冠军 亚军 季军
	t1 = tmp
	t2 = fun1(t1)
	for _ in t2:
		t1,remove(_)

	if int(t2[0].split(":")[1]) <= int(t2[1].split(":")[1]):
		t = t2[0]
		t2[0] = t2[1]
		t2[1] = t

	for _ in t2:
		res.append(_.split(":")[0])

	t = t1[0].split(":")[0] if int(t1[0].split(":")[1]) >= int((t1[1].split(":")[1])) else t1[1].split(":")[0]
    res.append(t)
    return res

r = fun(s)
print(r)

你可能感兴趣的:(OD试题,华为od,python)