为了账号安全,请及时绑定邮箱和手机立即绑定

在线等,挺急的!python中如何实现对数字的分解?

在线等,挺急的!python中如何实现对数字的分解?

MYYA 2019-07-28 12:43:50
例如,把9分解为不超过5个数字的和,且每个数字为正整数,均大于0小于4,如何利用python程序找到所有的分解情况?
查看完整描述

2 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

注:已修改少于5个数相加的情况。
比较傻的方法,先暴力求所有组合,然后根据Counter统计频次,频次不同的就是不同组合。
In[1]:res_list=[]
In[2]:foriinrange(0,4):
...:forjinrange(0,4):
...:forkinrange(0,4):
...:forlinrange(0,4):
...:forminrange(0,4):
...:ifi+j+k+l+m==9:
...:res_list.append([i,j,k,l,m])
...:
In[3]:fromcollectionsimportCounter
In[4]:dic=dict()
In[5]:forlistinres_list:
...:k=str(Counter(list))
...:ifknotindic:
...:dic[k]=list
...:
In[6]:dic.values()
Out[6]:dict_values([[0,0,3,3,3],[0,1,2,3,3],[0,2,1,3,3],[0,2,2,2,3],[1,0,2,3,3],[1,1,1,3,3],[1,1,2,2,3],[1,2,0,3,3],[1,2,2,2,2],[2,0,1,3,3],[2,1,0,3,3],[2,1,1,2,3],[2,2,2,3,0]])
                            
查看完整回答
反对 回复 2019-07-28
?
倚天杖

TA贡献1828条经验 获得超3个赞

fromitertoolsimportcombinations_with_replacement
#combinations_with_replacement组合,有重复(有放回抽样组合)
S=[]
U=[1,2,3]
foriinrange(6):
forjincombinations_with_replacement(U,i):
ifsum(j)==9:
S.append(j)
                            
查看完整回答
反对 回复 2019-07-28
  • 2 回答
  • 0 关注
  • 311 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信