面试算法题(python)
最新推荐文章于 2024-04-10 07:09:13 发布
原创最新推荐文章于 2024-04-10 07:09:13 发布·2.9k 阅读
1·
·
0
·
0
1·CC 4.0 BY-SA版权
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
文章标签:
本文探讨了通过定期调整优化团队规模以实现跨项目组协作的方法,并提供了一个具体的编程实例来解决这一问题。同时,文章还介绍了一种验证用户注册邀请码有效性的算法,包括一系列的校验规则和步骤。- 某公司内有 4 个项⽬目组,项⽬目组 A、B、C、D,项⽬目组A现有10⼈人,项⽬目组B现有7⼈人,项⽬目组C现 有5⼈人,项⽬目组D现有4⼈人。为了了实现跨项⽬目组协作,公司决定每⽉月从⼈人数最多的项⽬目组中抽调 3 ⼈人 出来,到其他剩下 3 组中,每组 1 ⼈人,这称之为⼀一次调整优化(亦即经过第⼀一次调整后,A组有7 ⼈人,B组有8⼈人,C组有6⼈人,D组有5⼈人)。 那么请问,经过⼗十年年的优化调整后,各项⽬目组各有⼏几⼈人? 编程求解该问题,并思考是否为最优解。
# 假设存放4个ABCD组人员dic={"A":10,"B":7,"C":5,"D":4}for iinrange(120): max_key=max(dic, key=lambda k:dic[k])for kin dic:if k== max_key: dic[max_key]-=3else: dic[k]+=1print(dic)- 某产品的⽤用户注册邀请码为⼀一串串有⼩小写字⺟母和数字组成的字符串串,字符串串⻓长度为16。当⽤用户数据邀 请码的时候,系统需要对邀请码做有效性验证,假设验证规则如下:
1、 从序列列号最后⼀一位字符开始,逆向将奇数位(1、3、5等等)相加;
2、从序列列号最后⼀一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去 9),再求和;
3、将奇数位总和加上偶数位总和,结果可以被10整除;
4、⼩小写字⺟母对应数值,可由下⾯面键值对确定; [(a,1), (b,2), (c,3)…,(i,9), (j,1), (k, 2)…],亦即,按字⺟母顺序,1-9循环。
输⼊入:输⼊入16位字符串串,表示邀请码
输出:输出“ok”或者“error”
defverify_code(code):# 验证长度和格式iflen(code)!=16ornotisinstance(code,str)ornot code.isalnum():print("不符合规则")return# 建立对应关系 dic=dict() num=1for alphain"abcdefghijklmnopqrstuvwxyz":if num>9: num=1 dic[alpha]= num num+=1 _temp_list=list(code)[::-1]# 逆向列表 odd=0 even=0for index, vinenumerate(_temp_list): index+=1if index%2:# 奇数位处理if v.isalpha(): _num= dic[v] odd+= _numcontinue odd+=int(v)else:# 偶数位处理if v.isalpha(): _num=(dic[v])*2if _num>9: even+=(_num-9)continue even+= _numcontinue _num=int(v)*2if _num>9: even+=(_num-9)continue even+=int(v)# 验证结果if(odd+ even)%10:print("error")else:print("ok")3\ 游戏币组合 ⼩小明的抽屉⾥里里有n个游戏币,总⾯面值m,游戏币的设置有1分的,2分的,5分的,10分的,
⽽而在⼩小明 所拥有的游戏币中有些⾯面值的游戏币可能没有,求⼀一共有多少种可能的游戏币组合⽅方式?
输⼊入:输⼊入两个数n(游戏币的个数),m(总⾯面值)。
出:请输出可能的组合⽅方式数;
# 不够优雅,求一个大神赐教。defcombine_coin(n, m):if(n*10)< mor m< nor n<0or m<0:return0 count=0 num_10=0 num_5=0 num_2=0while num_10<=(m//10): sum_125= m-(num_10*10)while num_5<=(sum_125//5): sum_12= sum_125-(num_5*5)while num_2<=(sum_12//2): sum_1= sum_12-(num_2*2)if sum_1>=0: num_1= sum_1if(num_10+num_5+num_2+num_1)== n:print(num_10, num_5, num_2, num_1) count+=1 num_1+=1 num_2+=1 num_5+=1 num_2=0 num_10+=1 num_5=0return count
1 条评论您还未登录,请先登录后发表或查看评论















735






















