一、编程题
1、36.换位密码法是将明文中的字符位置通过一定的规则重新排列从而得到密文的一种加密方法。某换位密码法加密方法如下:先把明文按照固定长度(4位一组)进行分组,然后对每一组的字符进行换位操作,从而得到密文。例如, 字符串"ceit",使用密钥1432进行加密时,首先将字符串以 4 个字符为一组进行分组,然后对每组的字符进行换位,第1个和第3个字符位置不变,把第2个字符和第4个字符交换位置,从而得到密文"ctie"。小张编写的程序如下,请完善划线处的代码:
def jiami(yw,key):
result = ''
for i in range(0, ① ,len(key)):
s1=yw[i:i+ len(key) ]
for j in range( ② ):
result = result + ③
return result
yw= input('请输入待加密的明文:')
key= input('请输入密钥:')
mw= ④
print(mw)
运行结果如下图所示:
2、37.一张长方形的纸,长m米,宽n米(长宽均为整数),现在要把它刚好裁成一些正方形(边长是整数),有几种裁法,如果要使裁得的正方形面积最大,可以裁多少块。小明学习了递归后,编写程序如下,首先输入长方形的长和宽,计算出结果。请完善划线处的代码:
def tj(a,b):
c = 0
minn = ①
if a > b:
minn = b
for i in range(1,minn+1):
if a % i == 0 and b % i == 0:
c = ②
return c
def gcd(a,b):
if b == 0:
return a
return ③
chang = int(input('输入长方形的长 (单位cm)'))
kuan = int(input('输入长方形的宽 (单位cm)'))
bianchang = gcd(chang,kuan)
total = ④
num = tj(chang,kuan)
print('------------结果如下-------------')
print('有{}种裁法'.format(num))
print('裁得的正方形面积最大边长是{}cm,可以裁{}块'.format(bianchang,total))
运行后的结果如下图所示:
参考答案:1. ①处应填`min(a, b)`,表示取长和宽的最小值作为正方形的最大可能边长。2. ②处应填`c + (a // i) * (b // i)`,表示当前边长i下,可以裁出的正方形数量,累加到c上。3. ③处应填`gcd(b, a % b)`,表示求最大公约数,递归调用gcd函数。4. ④处应填`(chang * kuan) // (bianchang * bianchang)`,表示计算可以裁出的最大面积正方形的数量。
3、38.商超采用会员制,客户的消费信息如会员号、姓名和积分如下表所示,小方的爸爸想编写一个客户信息管理系统,其中有一个功能是:输入会员号,查询该会员的积分。
小方知道后,就跃跃欲试,他首先从数据库读取客户信息到列表data中,其中data[i][0]存储第i条记录的会员号,data[i][1]存储第i条记录的姓名,data[i][2]存储第i条记录的积分;他首先将数组data中数据按会员号升序排序,然后用二分查找算法查找会员号对应的积分信息。代码如下,完善划线处的代码:
def bubble_sort(d):
for i in range(len(d)-2):
for j in range(len(d)-1, ① ,-1):
if d[j][0] < d[j-1][0]:
d[j],d[j-1] = d[j-1],d[j]
def bin_ search(d, key):
i,j = 0, len(d)-1
while i <= j:
m=(i +j)//2
if ② :
return m
if key > d[m][0]:
i = m+1
else:
j = m-1
return -1
\#从数据库读取会员信息存列表data中,代码略
data=[[8011,'张飞',12345],[8012,'李强',34512],[7812,'李好',45321]]
bubble_sort(data)
key = int(input('输入会员号:'))
m = ③
if m!=-1:
print (data[m][1],'先生/女士:您的积分是:',data[m][2])
else:
print('该会员号不正确')
参考答案:1. ①处应填:i2. ②处应填:d[m][0] == key3. ③处应填:bin_search(data, key)
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!