目录
3281. 约瑟夫环
题目:
- 整数分解为若干项之和
将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,…。编程求出正整数N的所有整数分解式子。
输入格式:
每个输入包含一个测试用例,即正整数N (0<N≤30)。
输出格式:
按递增顺序输出N的所有整数分解式子(见样例)。每个式子由小到大相加,式子间用分号隔开,且每输出4个式子后换行。
输入样例:
7
输出样例:
7=1+1+1+1+1+1+1;7=1+1+1+1+1+2;7=1+1+1+1+3;7=1+1+1+2+2
7=1+1+1+4;7=1+1+2+3;7=1+1+5;7=1+2+2+2
7=1+2+4;7=1+3+3;7=1+6;7=2+2+3
7=2+5;7=3+4;7=7
思路:
这个采用的是递归算法,因为循环次数过于庞大。从每一位开始添加,用链表装之。添加一个后进行递归直到符合条件打印输出,然后进行下一次循环,这个时候就需要将上次压入的数弹出
代码:
count=0
wcnm=[]
def construct(n,low=1,num=[],sumn=0):
global count
for i in range(low,n+1):
num.append(i)
sumn=sum(num)
if sumn>n:
return
elif sumn==n:
wcnm.append('%d='%n+'+'.join(str(i) for i in num))
else: #sum<n
lnum=num[:]
construct(n,i,lnum,sumn)
#为下一次for循环做清理
num.pop()
construct(int(input()))
for i in wcnm:
print(i,end='')
count+=1
if i==wcnm[-1]:
pass
elif count%4:
print(';',end='')
else:
print('')