[算法] 列出 5 个开关的所有开关情况? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
YYSWDD

[算法] 列出 5 个开关的所有开关情况?

  •  
  •   YYSWDD Apr 28, 2019 3681 views
    This topic created in 2556 days ago, the information mentioned may be changed or developed.

    5 个开关相当于 5 个二进制位。

    列出 5 个二进制位的所有排列情况。

    类似:

    0,0,0,0,0 ;

    0,0,0,0,1 ;

    0,0,0,1,0 ;

    0,0,0,1,1 ;

    0,0,1,0,0 ;

    0,0,1,0,1 ;

    Supplement 1    Apr 28, 2019
    发现一种方法,可以这么列。
    但是有个问题,最后一个全是 1 的情况没有打印出来。

    //列出所有情况
    var recursion = function (arr, num) {
    if (num < arr.length ) {
    arr[num] = 0;
    recursion (arr, num + 1);
    console.log(arr.toString());
    arr[num] = 1;
    recursion (arr, num + 1);
    }
    }
    Supplement 2    Apr 30, 2019
    确实用 1 楼回复的方法是最好的。

    for i in range(2**5):
    print bin(i)

    用 2 的 n 次方次循环。但是这种方法,就体会不到,每个开关变换的情况。

    转换成二进制,可以考虑用别的方法替换。
    binux
        1
    binux  
       Apr 28, 2019   5
    for i in range(2**5):
    print bin(i)
    YYSWDD
        2
    YYSWDD  
    OP
       Apr 28, 2019
    @binux #1 用算法实现。循环,递归把这个列出来。。
    binux
        3
    binux  
       Apr 28, 2019   1
    @YYSWDD #2 我不是用循环列出来了吗。
    noqwerty
        4
    noqwerty  
       Apr 28, 2019   1
    @binux #1 补充个好看点的:
    for i in range(2**5):
    print("{:05b}".format(i))
    YYSWDD
        5
    YYSWDD  
    OP
       Apr 28, 2019
    @binux #3 我用递归的方式呢。
    madao
        6
    madao  
       Apr 28, 2019
    ([1,0]*5).combination(5).to_a.uniq
    SorcererXW
        7
    SorcererXW  
       Apr 28, 2019   1
    非得使用所谓“算法”的说法,就是把它看成一个 n+1 层的二叉树,先序遍历一遍就好了
    holmesabc
        8
    holmesabc  
       Apr 28, 2019   1
    第 1 位为 (0, 1), 与 F(剩余的四位所有开关方式) 组合一下。

    递归一下
    YYSWDD
        9
    YYSWDD  
    OP
       Apr 28, 2019
    @binux 考试题目,这么写,会不会被打?
    inhzus
        10
    inhzus  
       Apr 28, 2019 via Android
    void printPermutation(int depth, string foo) {
    if (depth > 5)
    return;
    else if (depth > 0)
    cout << foo << endl;
    printPermutation(depth + 1, foo + "1");
    printPermutation(depth + 1, foo + "0");
    }

    手机上写的 将就看吧
    inhzus
        11
    inhzus  
       Apr 28, 2019 via Android
    @inhzus 搞错了
    else if (depth == 5)
    cout << foo <<endl;
    dingyaguang117
        12
    dingyaguang117  
       Apr 28, 2019
    估计这题目是希望用 DFS
    stevenshuang
        13
    stevenshuang  
       Apr 28, 2019 via iPhone
    cnt = 0
    def aux(start, arr):
    if start == 5:
    global cnt
    cnt += 1
    print arr
    else:
    for i in range(2):
    arr[start]= i
    aux(start+1, arr)
    def main():
    arr=[0]*5
    for i in range(2):
    arr[0]=i
    aux(1, arr)

    main()
    print cnt
    maggch
        14
    maggch  
       Apr 28, 2019
    这也算算法吗...
    behanga
        15
    behanga  
       Apr 28, 2019
    11111 的全排列?
    minami
        16
    minami  
       Apr 28, 2019   1
    next_permutation,搞定
    minami
        17
    minami  
       Apr 28, 2019
    还可以 bitset
    ezksdo
        18
    ezksdo  
       Apr 28, 2019
    module Main where
    import Numeric.Natural
    import Prelude hiding ( (^) )

    (^) :: [Int] -> Natural -> [[Int]]
    a ^ n = f a n [[]]
    where
    f _ 0 s = s
    f a n s = f a (n - 1) ((:) <$> a <*> s)

    main :: IO ()
    main = print ([0, 1] ^ 5)
    sosilver
        19
    sosilver  
       Apr 29, 2019 via Android
    function s(str, n) {
    if (n == 0) return arr.push(str)
    s(str + "0", n - 1)
    s(str + "1", n - 1)
    }
    LxExExl
        20
    LxExExl  
       Apr 29, 2019 via iPhone
    LC 有个 combination 系列 模板总结的非常好了
    Cbdy
        21
    Cbdy  
       Apr 29, 2019 via Android
    11111B 种
    iceheart
        22
    iceheart  
       Apr 29, 2019 via Android
    for (ini i = 0; i < 32; i++) {
    printf("%d,%d,%d,%d,%d\n",
    i / 16,
    (i/8)&1,
    (i/4)&1,
    (i/2)&1,
    i&1);
    }
    loading
        23
    loading  
       Apr 29, 2019 via Android   3
    楼主希望的是获得直译型的价值 5 毛的代码,而 @binux 给出一个价值 5 亿的代码。
    F281M6Dh8DXpD1g2
        24
    F281M6Dh8DXpD1g2  
       Apr 29, 2019 via iPhone   3
    楼上所有答案的作者都没有 @binux 对这个问题理解的深刻
    JmmBite
        25
    JmmBite  
       Apr 29, 2019
    i=32;
    while(i--){
    console.log((i).toString(2));
    }
    Variazioni
        26
    Variazioni  
       Apr 29, 2019
    @binux #1 qiandao.today 的作者?膜拜大神。。
    versionzhang
        27
    versionzhang  
       Apr 29, 2019 via Android
    这个不是用高中排列组合的知识就搞定了么。 。2 的 n 次方,每个开关有两种情况,总共有 n 位
    versionzhang
        28
    versionzhang  
       Apr 29, 2019 via Android
    @versionzhang 列出来的话就是从 0 到 2 的 n 次方-1 的二进制表示。。
    About     Help     Advertise     Blog     API     FAQ     Solana     5800 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 96ms UTC 07:08 PVG 15:08 LAX 00:08 JFK 03:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86