![](/img/trans.png)
[英]Generate all binary strings of length n with k bits set.(need to write on C)
[英]Printing all binary strings of length N using recursion (in c)
我需要打印所有长度为 N 的二进制字符串,从 0 到可以表示的最高数字。 我下面的代码适用于生成所有字符串。 我遇到的问题是字符串不是按从小到大的顺序排列的。
#define MAX_LENGTH 10
char binarystrings[MAX_LENGTH];
void binary(int n) {
if (n == 0) {
printf("%s\n", binarystrings);
} else {
binarystrings[n-1] = '0';
binary(n-1);
binarystrings[n-1] = '1';
binary(n-1);
}
}
int main() {
int length;
scanf("%d", &length);
binary(length);
}
当我的程序接收 3 时,它会生成:
000
100
010
110
001
101
011
111
但我需要它来生成:
000
001
010
011
100
101
110
111
我应该如何让我的程序按正确的顺序排列数字?
怎么样printf(“%s \\ n”,strrev(binarystrings)); 反转字符串并检查错误,然后将其打印并初始化char数组以包含null可能更安全。最后,该数组不必为MAX_LENGTH +1
您正在从右到左填充binarystring
。 从左到右填充它。 为此,您需要将两个参数(例如,位置和长度)传递给binary
:
void binary(int index, int length)
{
if (index == length)
return;
binarystring[index] = 0;
binary(index + 1, length);
binarystring[index] = 1;
binary(index + 1, length);
}
并将其称为binary(0, length)
。
你可以试试我的代码......我得到了正确模式的答案:
enter code here
#include <stdio.h>
void printBinary(int a[],int n){
for (int i=0;i<n;i++){
printf("%d",a[i]);
}
printf("\n");
}
void generateBinaryString(int n,int a[],int i){
if (i==n){
printBinary(a,n);
return;
}
a[i]=0;
generateBinaryString(n,a,i+1);
a[i]=1;
generateBinaryString(n,a,i+1);
}
int main()
{
int n;
printf("printing the binary string for n nos.");
scanf("%d",&n);
int a[n];
generateBinaryString(n,a,0);
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.