排列0和1

时间:2017-06-01 01:15:41

标签: c

如何编写一个C程序,在给定n个数字(从1到10)的情况下,我的结果是0和1的排列。 例如,让我们说n = 2。我的输出必须是:00; 01; 10; 11。依此类推,对于n = 3,将有8种可能的排列(000, 001, 010, 100, 101, 110, 011, 111)

我对代码有一些限制:

  • 我唯一可能的库是stdio.h(鉴于此,不允许使用math.h);

  • 不允许继续和休息;

  • 每个函数必须有一个返回值;

  • 也不允许使用按位运算符;

谢谢你。

编辑:实际上,该计划比这更大,我已经实现了所有其他部分,但我无法解决这一部分。

2 个答案:

答案 0 :(得分:1)

#include <stdio.h>

#define PROC_BEGIN \
    ++i;                                              \
    for(char bit = '0' ; i != n &&  bit < '2'; ++bit){\
        bits[i] = bit;                                \
        if(i+1 == n)                                  \
            puts(bits);                               \
    /**/

#define PROC_END \
    }            \
    --i;         \
    /**/

int main(void){
    char bits[10+1] = {0};
    int n, i = -1;
    scanf("%d", &n);

    PROC_BEGIN
    PROC_BEGIN
    PROC_BEGIN
    PROC_BEGIN
    PROC_BEGIN
    PROC_BEGIN
    PROC_BEGIN
    PROC_BEGIN
    PROC_BEGIN
    PROC_BEGIN
    PROC_END
    PROC_END
    PROC_END
    PROC_END
    PROC_END
    PROC_END
    PROC_END
    PROC_END
    PROC_END
    PROC_END
    return 0;
}

答案 1 :(得分:1)

这是我的递归破解。

#include <stdio.h>

void permute_iter(int left, char str[])
{
    if(left>=0) {
        str[left] = '0';
        permute_iter(left-1, str);
        str[left] = '1';
        permute_iter(left-1, str);
    } else {
        puts(str);
    }
}

void permute(int times)
{
    char str[times+1];
    str[times] = '\0';
    permute_iter(times-1, str);
}

int main()
{
    permute(4);
    return 0;
}