小学生蓝桥杯Python闯关 | 烤鸡

110 阅读2分钟

学习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