zoukankan      html  css  js  c++  java
  • python排列组合

    前言

    在程序设计的过程中,全排列是比较经常遇到的一类问题,有时候自己写还是有点麻烦,也比较浪费时间。在这里我介绍一种python中的全排列函数——itertools.permutations。更重要的是itertools是一个标准库,不需要额外安装只要import即可,要知道正式比赛中是不允许使用第三方库的。

    正文

    我们先看下函数的语法格式和参数:

    itertools.permutations(iterable[, r])

    r 指定生成排列的元素的长度,如果不指定,则默认为迭代对象的元素长度。

    示例:

    >>> list(itertools.permutations([1,2,3],2))
    [(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]
    >>> list(itertools.permutations([1,2,3],3))
    [(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]

    下面是我在洛谷上用该方法解决的一道题:

    题目描述

     

    1,2,⋯ ,99个数分成3组,分别组成3个三位数,且使这3个三位数构成1:2:3的比例,试求出所有满足条件的3个三位数。

    输入格式

     

    木有输入

    输出格式

    若干行,每行3个数字。按照每行第1个数字升序排列。

    import itertools
    nums = [1,2,3,4,5,6,7,8,9]
    for num in itertools.permutations(nums, 9):
        a = 100*num[0] + 10*num[1] + num[2]
        b = 100*num[3] + 10*num[4] + num[5]
        c = 100*num[6] + 10*num[7] + num[8]
        if b == 2*a and c == 3*a:
            print(a, b, c)   

     该段函数输出如下:

    192 384 576
    219 438 657
    273 546 819
    327 654 981

    可以看到这些数字都是有序的,正好符合题目的要求。但是要注意的是在排列前迭代对象必须有序,否则不会有序输出。


    下面介绍python中的组合函数——combinations(),同样也是itertools库中的函数,用法也和permutations()一样,这里就不再赘述了,只要搞懂了排列函数,组合函数也就懂了。

  • 相关阅读:
    POJ 1015 Jury Compromise【DP】
    POJ 1661 Help Jimmy【DP】
    HDU 1074 Doing Homework【状态压缩DP】
    HDU 1024 Max Sum Plus Plus【DP,最大m子段和】
    占坑补题。。最近占的坑有点多。。。
    Codeforces 659F Polycarp and Hay【BFS】
    Codeforces 659E New Reform【DFS】
    Codeforces 659D Bicycle Race【计算几何】
    廖大python实战项目第四天
    廖大python实战项目第三天
  • 原文地址:https://www.cnblogs.com/marvin-wen/p/11883808.html
Copyright © 2011-2022 走看看