Movatterモバイル変換


[0]ホーム

URL:


面试算法题(python)

最新推荐文章于 2024-04-10 07:09:13 发布
原创最新推荐文章于 2024-04-10 07:09:13 发布·2.9k 阅读
· 0
· 1·
CC 4.0 BY-SA版权
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
文章标签:

#算法

本文探讨了通过定期调整优化团队规模以实现跨项目组协作的方法,并提供了一个具体的编程实例来解决这一问题。同时,文章还介绍了一种验证用户注册邀请码有效性的算法,包括一系列的校验规则和步骤。
  1. 某公司内有 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)
  1. 某产品的⽤用户注册邀请码为⼀一串串有⼩小写字⺟母和数字组成的字符串串,字符串串⻓长度为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
确定要放弃本次机会?
福利倒计时
::

立减 ¥

普通VIP年卡可用
立即使用
1 条评论您还未登录,请先登录后发表或查看评论

博客等级

码龄7年
32
原创
22
点赞
83
收藏
10
粉丝
关注
私信

热门文章

分类专栏

展开全部收起

上一篇:
SQL性能优化必备工具explain详解
下一篇:
归并排序(python)

最新评论

大家在看

最新文章

目录

展开全部

收起

目录

展开全部

收起

上一篇:
SQL性能优化必备工具explain详解
下一篇:
归并排序(python)

目录

评论 1
被折叠的  条评论为什么被折叠?到【灌水乐园】发言
查看更多评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

[8]ページ先頭

©2009-2025 Movatter.jp