如何编写一个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);
不允许继续和休息;
每个函数必须有一个返回值;
也不允许使用按位运算符;
谢谢你。
编辑:实际上,该计划比这更大,我已经实现了所有其他部分,但我无法解决这一部分。答案 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;
}