summer_529 2022-02-08 17:08 采纳率: 84.6%
浏览 61
已结题

PythonRGB红黄蓝小球排列问题 求解

小蓝有黄绿蓝三种颜色的小球,分别为 R,G,B个。同样颜色的小球没有区别。小蓝将这些小球从左到右排成一排,排完后,将最左边的连续同色小球个数记为 t1,将接下来的连续小球个数记为 t2,以此类推直到最右边的小球。请问,总共有多少总摆放小球的方案,使得 t1,t2,⋯为严格单调递增序列,即 t1≤t2≤t3。
输入描述
输入一行包含三个整数 R,G,B。
其中,0≤R,G,B≤50。
输出描述
输出一个整数,表示答案。
输入输出样例
示例 1
输入
3 6 0
输出
3

  • 写回答

1条回答 默认 最新

  • 陈.py 2022-02-09 10:42
    关注
    
    import itertools
    
    # count用于对符合要求的组合计数
    count = 0
    num = [int(i) for i in input().split(' ')]
    
    
    # 生成对应的所有小球列表
    def set_list(num):
        ball_list = []
        for i in range(num[0]):
            ball_list.append('R')
        for i in range(num[1]):
            ball_list.append('G')
        for i in range(num[2]):
            ball_list.append('B')
        return ball_list
    
    
    # 枚举所有小球的排列情况
    combination = [list(i) for i in list(set(itertools.permutations(set_list(num), sum(num))))]
    
    # 遍历所有情况,判断是否符合递增要求
    for i in combination:
        l = [len(list(v)) for k, v in itertools.groupby(i)]
        if all(x < y for x, y in zip(l, l[1:])):
            count += 1
    
    print(count)
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月17日
  • 已采纳回答 2月9日
  • 创建了问题 2月8日