c语言如何生成长度为n的二进制字符串的全排列

作者&投稿:语研 (若有异议请与网页底部的电邮联系)
c语言中怎样把n个数排列 得到所有排列情况~

#include
inline void Swap(char& a, char& b)
{// 交换a和b
char temp = a;
a = b;
b = temp;
}

void Perm(char list[], int k, int m)
{ //生成list [k:m ]的所有排列方式
int i;
if (k == m) {//输出一个排列方式
for (i = 0; i <= m; i++)
putchar(list[i]);
putchar('
');
}
else // list[k:m ]有多个排列方式
// 递归地产生这些排列方式
for (i=k; i <= m; i++) {
Swap (list[k], list[i]);
Perm (list, k+1, m);
Swap (list [k], list [i]);
}
}

int main()
{
char s[]="123";
Perm(s, 0, 2);
return 0;
}

#include #include #include using namespace std;vector do_permutation(string str){ vector res; if (str.size() > 1){ for (size_t i = 0; i != str.size(); ++i){ string sub_str = str.substr(0, i) + str.substr(i + 1); vector tmp = do_permutation(sub_str); for (size_t j = 0; j != tmp.size(); ++j){ res.push_back(str[i] + tmp[j]); } } } else{ res.push_back(str); } return res;}int main(){ size_t n; cout > n){ string str; for (size_t i = 0; i != n; ++i){ str += static_cast('a' + i); } vector res = do_permutation(str); for (size_t i = 0; i != res.size(); ++i){ cout << res[i] << "
"; } } else{ cerr << "输入有误
"; } return 0;}

#include "stdio.h"
int main(int argc,char *argv[]){
int n,i,m;
char p[33];
printf("please enter n(int n>0)...
");
if(scanf("%d",&n)!=1 || n<1 || n>32){
printf("Input error, exit...
");
return 0;
}
for(i=0;i<n;p[i++]='0');
p[i]='\0';
for(m=1,i=0;i<n;m+=m,i++);
while(m--){
printf("%s ",p);
for(p[i=n-1]++;i>=0;i--){
if(p[i]>'1')
p[i]-=2,p[i-1]++;
else
break;
}
}
printf("
");
return 0;
}

运行样例:



#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void add(char* p, int i)  //参数:p为数组,i为正在检测的位 
{
if(p[i]=='0')         //当该位为0, 则变为1, 退出add函数 
{
p[i]='1';
return;
}
else if(p[i]=='1')   //如果该位为1,则变为0, 再检测前一位, 如果前一位还为1, 则检测再前一位 
{                    //直到前一位为0,才退出add函数 
p[i]='0';
add(p,--i);
}
}

int main()
{
char* p=NULL;
int n;
while(1)     //循环输入不同的位数 
{
printf("

please input:");
fflush(stdin);  //清空输入缓冲 
scanf("%d",&n);
if(n<1)   //输入小于1时退出程序 
{
break;
}
if(p!=NULL)  //如果p数组存在,则释放它, 重新构建数组 
{
free(p);
}
p=(char*)malloc(sizeof(char)*(n+1));  // 重新构建数组 
memset(p,'0',n);                      //每位先设置为0 
p[n]='\0';
printf("
%s",p);                     //输出全0情况 
int i=n-1;                            //末尾位 

while(1)
{
int flag=1;
int j;
for(j=0;j<n;j++)     //如果每一位全为1,则结束 
{
if(p[j]=='0')
{
flag=0;
break;
}
}
if(flag==1)
{
break;
}
else                //如果不是每一位全为1,则在最后位上加1(调用add函数) 
{
add(p,n-1);
printf("
%s",p);
}
}

}
return 0;
}


#include<stdio.h>
#include<stdlib.h>
#include <math.h>
//注意必须调用stdlib.h函数库
int main(void){
int a=0,n,i;
char str[30];
printf("请输入整数n:");
scanf("%d",&n);
a=(int)pow((double)2,(double)n);//2的n次方的值
for (i=0;i<a;i++)
{
itoa(i,str,2);//2即是代表转换为2进制
printf("%0*s,",n,str);
}
return 0;
}



c语言产生40个长度为4-10个字符的随机英文单词,并按字典顺序输出_百度...
include"stdio.h"#include"string.h"intmain(){charstr[10][30]={0};chartem[30]={0};inti,j;printf("请输入10个单词:");for(i=0;i

C语言:随机生成100个数,要求分成两组,一组50个数,让这两组的和相差尽 ...
以下函数通过系统时间随机生成1-1000之间的随机数,分成两组后使其总和差值最小。算法分析:见源程序中的注释,算法可能有些许额误差,共参考。include<stdio.h> include<stdlib.h> include \/\/***产生长度为length的不为0的可重复随机数组***\/\/ void radomArray(int *array,int length){ srand((u...

求将64位二进制位转化为长度为8的字符的C语言算法
extern void Bit64tochar8(int bit[64],char ch[8]){ int i,j;for(i=0;i<8;i++)ch[i] = 0;for(i=8;i>0;i--)for(j=8;j>0;j--)ch[i]=ch[i]*2+bit[i*8-j];}

C语言 输入一个长度为10的字符串,
include <stdio.h>int main(){ char psw[11]; int i; printf("输入10个字符:"); scanf("%s",psw); printf("输出:\\n"); for(i=0;i<10;i++) { if((psw[i]>='a' && psw[i]<='z')||(psw[i]>='A' && psw[i]<='Z')) { if(i==2...

怎么用c语言随机生成一串字符串,字符串要求8-16位并且包含大小写字母...
printf("产生20组字符串:\\n");for(j=0;j<20;j++){ s[0]=65+rand()%26; \/\/以下4行确保含有大小写字母、数字和符号 s[1]=48+rand()%10;s[2]=33+rand()%15;s[3]=97+rand()%26;n=rand()%9+4;for(i=4;i<n+4;i++) \/\/保证总长度为8~16 s[i]=33+rand()%...

C语言 定义一个长度为10的整型数组 用for语法?
include<stdio.h> void sort(int arr[],int len){ int i ,j;int temp = 0;for(i = 0;i<len-1;i++){ for(j = 0;j<len-1-i;j++){ if(arr[j]>arr[j+1]){ temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;} } } } void printArr(int arr[],int len)...

如何创建一个指定长度的数组,比如:创建一个长度位256的整数数组(可以用...
你这个长度为256没带单位,姑且当你说的是256个int吧.C语言:静态分配:int a[256];动态分配:int* a = (int*)malloc(256*sizeof(int));

心理语言学的言语产生
语误分析法是言语产生研究中的基本方法之一,通过搜集人们实际语言交流中出现的口误材料,从不同的角度进行分类,可以揭示语言在大脑中的表征方式和语言产生的具体心理过程。已有的口误研究发现,句子的产生首先要确定句子的基本结构,包括句子的主次重音;词项的填入是实词在先,虚词在后。语误分析对于探讨具有汉语特色的一些...

c语言如何计算n行字符串的长度?
error, exit...\\n");return 0;} printf("Please enter %d strings...\\n",n);getchar();for(i=0;i<n;i++)fgets(s[i],81,stdin);\/\/代替gets(s[i]);,能限制长度为80 for(i=0;i<n;i++)printf("The string %d's length is %d.\\n",i+1,strlen(s[i]));return 0;} ...

C语言:给定3个字符,输入n,求长度为n的所有组合
刚花了一个多小时帮你把这个写出来了,兄弟,不容易啊 ,多给点悬赏啊!include <stdio.h> void main(){ int m=1,i,n,j,t,k,q;scanf("%d",&n);for(i=0;i<n;i++)m=3*m; \/\/m为3的n次方 k=m; \/\/记忆m的值 for(i=0;i<m;i++){ q=i; \/\/记忆i的值 f...

湘阴县18012721837: C语言..编写函数,实现把整数n变换成对应二进制字符串,求代码 -
泣房莱沃: 大一新生写的代码 不要喷啊 #include #include void jz(int n,int x) { int z; if(n/x>0) { jz(n/x,x); } printf("%d",n%x); } int main() { int a,b; printf("原数:"); scanf("%d",&a); printf("进制:"); scanf("%d",&b); jz(a,b); }

湘阴县18012721837: C语言中怎么输出数据的二进制 -
泣房莱沃: 没有专门的输出二进制语句 需要自己写函数. 比如 void print_bin(int n) {int i;for(i=sizeof(n)*4-1; i>=0; i --){if(n&(1<<i))printf("1");else printf("0");} }这个是通过位操作 来打印一个int型的所有二进制值的函数.

湘阴县18012721837: C语言,如何把输入的一个字符串,转换为相应的二进制数? -
泣房莱沃: #include void ConvertData(int x,char *s,int n) { int m=0,i,k;while ( x ) { *s=x%n+'0'; x/=n; s++; m++; }*s=0;s-=m; for ( i=0;i<=m/2;i++ ) { k=s[i];s[i]=s[m-i-1];s[m-i-1]=k; } } void main() { char str[256]; int x;printf("请输入十进制数: "); scanf("%d",&x);ConvertData(x,str,2); printf("十进制%d转换成二进制是%s\n",x,str); }

湘阴县18012721837: 求将数字转换为二进制字符的C语言程序 -
泣房莱沃: itoa(i,str,2);把数字i转换为二进制字符str

湘阴县18012721837: C语言 将输入转化成二进制代码
泣房莱沃: #include<stdio.h> #include<stdlib.h> #include<math.h> main(){ float a,d,R=0,L=0,b; /* d is a decimal,b is the change result,binary*/ int i; int j; printf("please input the decimal to change:\n"); scanf("%f",&d); a=d; /*d to a*/ for(i=0;a>=1;i++){ if(pow(...

湘阴县18012721837: c语言将全英文字符转换为二进制? -
泣房莱沃: #include void ToBin(char c, char *s) { s[0]=0; int b=128; for(int i=0;i { if(c>=b) {s[i]='1';c-=b;} else s[i]='0'; b>>=1; } s[8]=0; } void main() { char c='E'; char S[20]; scanf("%c",&c); fflush(stdin); ToBin(c,S); printf("(%c) %s\n",c,S); }

湘阴县18012721837: C语言怎么输出二进制数? -
泣房莱沃: 有八进制,十进制和十六进制,不过没二进制,如果要,只能自己写转化#include<stdio.h> void main() { int n = 11; printf("%o\n", n); printf("%d\n", n); printf("%x\n", n); }

湘阴县18012721837: c语言 10进制转化成n进制 -
泣房莱沃: //字符处理 void p(char ch,int t){int i;for(i=1;i<=t;i++)putchar(ch);return;} void mid(char *s,char *d,int l,int r){int i,len=0;for(i=l;i<=r;i++)d[len++]=s[i];d[len]=0;} int eval(char *s){int ret=0,sgn=(s[0]=='-'?-1:1);for(s+=(s[0]=='-');*s;s++)ret=ret*10+(*s)-'0';return ret...

湘阴县18012721837: 怎么用C语言编程把十进制转化成二进制 -
泣房莱沃: c语言中没有二进制的格式输出符号. 你可以用itoa函数很方便的将一个10进制int转变成二进制字符串. 如: int i; char s[128]; scanf("%d",&i); itoa(i, s, 2); /*3个参数,第一个是待转换的数,第二个是存放转换后的字符串,第三个即需要转换的进制*/ printf("该数转换为二进制是: [%s]\n",s);补充一点,itoa函数的头文件是stdlib.h

湘阴县18012721837: c语言中一般整型化为二进制,长度怎么规定的?比如int x=5;5化为二进制一般情况下是8位00000101,16位? -
泣房莱沃: 整型是16位的,最大的整型数可用二进制表示为0111 1111 1111 1111. 而实际写的时候不一定要写十六位,比如说12转为二进制可写为0000 0000 0000 1100,也可以写成1100,左侧的0可以省略,这和十进制有点像:012和12是一样的,左侧的0不影响大小,写不写没关系. int x=5;5转二进制可写为0000 0101,也可写为0000 0000 0000 0101,也可只写0101;都一样的.一般写的时候按方便简单的来.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网