C 0和1的置换

C 0和1的置换,c,C,如果给定我的n数字(从1到10),我的结果是0和1的排列,那么如何编写一个C程序呢。 例如,假设n=2。我的输出必须类似于:00011011。依此类推,对于n=3将有8种可能的排列(000001010100101110011111) 我对代码有一些限制: 我唯一可能的库是stdio.h(鉴于此,math.h是不允许的) 不允许继续和中断 每个函数必须有一个返回 也不允许使用位运算符 现在谢谢你 编辑:事实上,这个程序比这个大得多,我已经完成了所有其他部分,但我无法解决这个部分。#includ

如果给定我的
n
数字(从1到10),我的结果是0和1的排列,那么如何编写一个C程序呢。 例如,假设
n=2
。我的输出必须类似于:
00
<代码>01<代码>10<代码>11。依此类推,对于
n=3
将有8种可能的排列
(000001010100101110011111)

我对代码有一些限制:

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

  • 不允许继续和中断

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

  • 也不允许使用位运算符

现在谢谢你

编辑:事实上,这个程序比这个大得多,我已经完成了所有其他部分,但我无法解决这个部分。

#include
#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;
}
#定义过程开始\ ++一,\ for(字符位='0';i!=n&&bit<'2';++bit){\ 位[i]=位\ 如果(i+1==n)\ 放置(位)\ /**/ #定义过程结束\ } \ --一,\ /**/ 内部主(空){ 字符位[10+1]={0}; int n,i=-1; scanf(“%d”和“&n”); 程序开始 程序开始 程序开始 程序开始 程序开始 程序开始 程序开始 程序开始 程序开始 程序开始 程序结束 程序结束 程序结束 程序结束 程序结束 程序结束 程序结束 程序结束 程序结束 程序结束 返回0; }
这是我的递归破解

#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;
}
#包括
无效排列(int左,char str[])
{
如果(左>=0){
str[左]=“0”;
置换器(左1,str);
str[左]=“1”;
置换器(左1,str);
}否则{
put(str);
}
}
无效排列(整数倍)
{
字符str[次+1];
str[times]='\0';
置换反应器(times-1,str);
}
int main()
{
排列(4);
返回0;
}

你的代码示例在哪里?你完全是在寻求家庭作业方面的帮助。至少,你应该自己尝试一下,看看你在求助前遇到了什么困难。注意那些
1
s和
0
s的模式吗?查看是否可以将二进制数关联到
n
。每个函数必须有一个返回;也许你能想出如何添加一个:p这很难看,但很聪明