python整形长度_python实现整数分为几个数的和(详解)

python实现整数分为几个数的和

问题重述:

如何实现整数分为几个数的和,可以理解为一个整数的分箱问题

简单叙述解题思路:

比如:4这个整数,最多分为4个箱(1,1,1,1);最少一个箱(4)

所以我们定义一个长度为四的数组,每个数组最大能取到4(所以想到5进制),开始循环遍历(四个元素之和等于4即满足条件)

0001

0002

0003

0004(满足)

0010

0011

0012

0013(满足)

0014

0020

......

4440

4441

4442

4443

4444

当然啦这过程中会有重复的分箱,比如

0004

0040

0400

4000

所以在写程序的时候把满足相加等于4的元素,把含有0的全部弹出来,之后再出重就得到答案了。

废话不多说,代码实现如下:

程序中的a的就是我们输入的一个整数值,这里的a取list的长度

#-*-encoding=utf-8-*-

import itertools

from itertools import product

import numpy as np

def max_values(n,x):

max_value=0

iters=np.arange(0,x,1)

for i in iters:

max_value= np.power((n-x+2),i)*(n-x+1)+max_value

return max_value

def min_values(n,x):

min_value=0

iters=np.arange(0,x,1)

for i in iters:

min_value= np.power((n-x+2),i)*1+min_value

return min_value

def f(n,x):

a=range(1,30,1)

b=[]

while True:

s=n//x

y=n%x

b=b+[y]

if s==0:

break

n=s

b.reverse()

b=list(b)

return b

x=[1,2,3,4]

#a的长度就是我们输入的一个整数值,这里我取list的长度代替这个数

a=list(set(x))

iters=np.arange(1,a.__len__()+1,1)

contianer=list()

discontianer=list()

count=0

for i in iters:

for j in (np.arange(min_values(a.__len__(),i),max_values(a.__len__(),i)+1,1)):

b=f(j,a.__len__()-i+2)

if sum(b)==a.__len__() and (0 not in b):

contianer.append(tuple(sorted(b)))

discontianer=list(set(contianer))

print(discontianer)

输出结果

再试一下5的

喜欢的朋友请点赞哦,方法原创的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值