4月9日中行笔试

中行笔试 4月9日两小时 双机位

题目1

开发网站时,对于密码有一些规则:

  1. 密码长度至少为 10
  2. 只能包含大小写字母 和 数字
  3. 至少出现 大写字母、小写字母、数字 这3种类型里的 2 种
    给定一个密码 mypassword,判断密码是否符合规则?符合返回 true,否则返回 false。
def func(mypassword):
	if len(mypassword)<10:
		return False
	if mypassword.isalnum()==0:
		return False
	contain_upper = any(c.isupper() for c in mypassword)
	contain_lower = any(c.islower() for c in mypassword)
	contain_digit = any(c.isdigit() for c in mypassword)
	if contain_upper+cntain_lower+contain_digit<2:
		return False
	else:
		return True

题目2

小王有一个银行卡密码(存在字符串中),只包含数字和大写字母,现知道密码的规则如下:

  1. 必须是一串连续的数字
  2. 如果数字之间有”BAC“字符串的话,可以消除掉
  3. 数字可能会很大
    现需要从字符串中找到密码,找到的话输出符合规则的最大的数,如果字符串中没有数字的话返回 -1。
def func(mypassword):
	newpassword = mypassword.replace("BAC", "")
	res=0
	cur=""
	if newpassword.isalpha():
		return -1
	for c in newpassword:
		if c.isalpha():
			if cur:
				res = max(res, int(cur))
				cur = ""
		else:
			cur+=c
			print(cur)
	return max(res, int(cur))
print(func("ABC34BA2BAC3RH45"))					

题目3

在数据库中,为了方便存储 ip 地址,一般会把 ip 地址转化为一个十进制数字进行存储。
现需要把一个十进制的数字变回为 ip 地址的形式,规则如下:

  1. 首先把十进制的数字变成十六进制
  2. 每 2 位十六进制为一段,将其变成十进制,再加上点’.',填入到 ip 结果中。
    现对于一个数字,需要输出其对应的 ip 地址字符串。如果 ip 地址非法,则输出 “invalid”。
'''
有效的IPv4地址每个数字的范围是从00到FF/十六进制(0到255/十进制)
有效的IPv4地址每个数字的范围是从0000到FFFF/十六进制
'''

'''
1. 十进制转十六进制、八进制、二进制
number = 19
hex(number) oct(number) bin(number)
2. 十六进制、八进制、二进制转十进制
hex_number = "0xff"
oct_number = "0o377"
bin_number = "0b11111111"
number1 = int(hex_number, 16)
number2 = int(oct_number, 8)
number3 = int(bin_number, 2)
'''
def func(number):
	hex_number=hex(number)[2:] #前两位是0x
	res=[]
	if len(hex_number)>8:
		return "invalid"
	elif len(hex_number)<8:
		hex_number=hex_number.zfill(8)
	for i in range(0, 8, 2):
		cur=int(hex_number[i:i+2], 16)
		if cur<0 or cur>255:
			return "invalid"
		res.append(cur)
	print(res)
	return ".".join(res)
print(func(4311744512))
print(func(2130706433))
	

题目4

假设有很多不同面额的货币,每个货币只可以使用1次,但可以用不同面额的货币加在一起来购买大面额的商品,但是不想找零,因此对于一些金额的商品,无法进行购买。
比如有 1、2、5 元的货币,我可以购买 3 元的商品(1 + 2),但是由于 5 元无法找零,因此无法购买 4 元的商品。
现给定一个长度为 n 的正整数数组 money,分别表示 n 个货币的金额,求出无法购买的商品最小价格。

#呜呜呜原来如此简单
def func(money):
	money.sort()
	max_ = 0 #这里是0不是money[0],如果是money[0]的话需要有一个前置条件是money[0]=1
	for i in money:
		if i>max_+1:
			return max_+1
		else:
			max_ += i
	return max_+1
print(func([5,2,1]))
print(func([1,3,5]))		
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值