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这很难看,但很聪明