学习Python从娃娃抓起!记录下蓝桥杯Python学习和备考过程中的题目,记录每一个瞬间。
附上汇总贴:小学生蓝桥杯Python闯关 | 汇总_COCOgsta的博客-CSDN博客
【题目描述】
猪猪Hanke特别喜欢吃烤鸡(本是同畜生,相煎何太急!)Hanke吃鸡很特别,为什么特别呢?因为他有10种配料(芥末、孜然等),每种配料可以放1到3克,任意烤鸡的美味程度为所有配料质量之和。
现在,Hanke想要知道,如果给你一个美味程度n,请输出这10种配料的所有搭配方案。
【输入描述】
一个正整数n,表示美味程度。
【输出描述】
第一行,总方案数。
第二行至结束,10个数,表示每种配料所放的质量,按字典序排列。
如果没有符合要求的方法,就只要在第一行输出一个0。
【样例输入】
11
【样例输出】
10
1 1 1 1 1 1 1 1 1 2
1 1 1 1 1 1 1 1 2 1
1 1 1 1 1 1 1 2 1 1
1 1 1 1 1 1 2 1 1 1
1 1 1 1 1 2 1 1 1 1
1 1 1 1 2 1 1 1 1 1
1 1 1 2 1 1 1 1 1 1
1 1 2 1 1 1 1 1 1 1
1 2 1 1 1 1 1 1 1 1
2 1 1 1 1 1 1 1 1 1
【代码详解】
n = int(input())
arr = [0 for i in range(10+1)] #存临时方案
mem = [[0 for i in range(10+1)] for i in range(100+1)] #存所有方案
res = 0
def dfs(x, sum):
global res
if sum > n: return
if x > 10:
if (sum == n):
res += 1
for i in range(1, 10+1):
mem[res][i] = arr[i]
return
for i in range(1, 3+1):
arr[x] = i
dfs(x+1, sum+i)
arr[x] = 0 #恢复现场
dfs(1, 0)
# 打印方案数
print(res)
# 打印具体方案
for i in range(1, res+1):
for j in range(1, 10+1):
print(mem[i][j], end=" ")
print()
【运行结果】
11
10
1 1 1 1 1 1 1 1 1 2
1 1 1 1 1 1 1 1 2 1
1 1 1 1 1 1 1 2 1 1
1 1 1 1 1 1 2 1 1 1
1 1 1 1 1 2 1 1 1 1
1 1 1 1 2 1 1 1 1 1
1 1 1 2 1 1 1 1 1 1
1 1 2 1 1 1 1 1 1 1
1 2 1 1 1 1 1 1 1 1
2 1 1 1 1 1 1 1 1 1