我有四个数(如1,3,6,7)怎么用c语言编写:四个数所有排列组合

如题所述

#include <stdio.h>

#include <stdlib.h>

void swap(int &a, int &b)

{

    int temp = a;

    a = b;

    b = temp;

}

void Permutation(int *pStr, int begin, int end)

{

 if(begin == end - 1) //只剩一个元素

 {

     int i;

  for(i = 0; i < end; i++) //打印

   printf("%d ", pStr[i]);

  printf("\n");

 }

 else

 {

     int k;

  for(k = begin; k < end; k++)

  {

   swap(pStr[k], pStr[begin]); //交换两个字符

   Permutation(pStr, begin + 1, end);

   swap(pStr[k],pStr[begin]);  //恢复

  }

 }

}

int main()

{

    int a[] = {1,3,6,7};

    Permutation(a, 0, 4);

 getchar();

    return 0;

}

 

 

 

 

追问

Good job!

追答

有帮助就行,给个满意回答吧,嘿嘿

追问

好的

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-19
// it generates all the permutaions of 1,3,6,7
// hope you find my code help, correct me if I am wrong
1111
1113
1133
...
1367
...
6777
7777
void genPerm(char input[], char output[], int len, int num)

{
if(num == len)
{
output[4] = '\0';
cout << output << endl;
return;
}
for(int i = 0; i < len; i++)
{
output[num] = input[i];
genPerm(input, output, len, num+1);
}
}

int main()
{
char a[] = "1367";
char b[5];
doit(a,b,4,0);
return 0;
}追问

用c怎么写】

追答

This is completely C code

追问

这不是c++吗

追答

Try it in C, it should work

One correction
int main()
{
char a[] = "1367";
char b[5];
// the following line is changed from doit(a,b,4,0);

genPerm(a,b,4,0);
return 0;
}

追问

doit是什么函数?

追答

copy my code and give it a try
C might not have std::cout, use printf() instead of cout if you failed to compile

追问

我看得懂,就是我不知道doit是什么作用的函数

追答

I made a mistake, doit() is actually genPerm()
It was a typo, I am sorry for the misunderstanding I made.

Good luck : )

追问

我懂了,谢谢!

追答

No worries, have a nice day

我有四个数(如1,3,6,7)怎么用c语言编写:四个数所有排列组合
int a[] = {1,3,6,7};Permutation(a, 0, 4);getchar();return 0;}

c语言编程排列组合
1、求排列组合没有简单方法。方法只有一个,枚举。有几个位置需要列举,就需要几个循环。如果循环数量太多,可以用函数递归来枚举。2、例程:include<stdio.h> int main(){ int a[4]={1,3,4,7}; \/\/第一个位置 int b[4]={2,5,8,10}; \/\/第二个位置 int c[4]={...

C语言打印一窜数字的所有组合
1.楼主的数太多了,我的机器有点落伍,显示的时间有点漫长~~~,我把数改成了1,2,3,3,4,7,7。显示上也简单点,原理是一样的。。。另外不是很清楚楼主的所有组合是不是包括取出一部分字符串做排列组合,我弄的是所有 数字用上的全排列,就是没有12,13这样的组合数,楼主如果是需要显示...

请问怎么请EXCEL 0 1 2 3 4 5 6 7 8 9 四位数全部排列组合啊?
'按alt+f11进入VBE编辑窗口,然后选择插入---模块---会打开一个模 '块窗口,把下面的代码复制进去--保存,再次按alt+f11返回excel窗口 '按alt+f8打开运行宏窗口,会看到test宏,运行它就可以了 Option Explicit Sub test()Dim i As Integer, j As Integer, l As Integer, n As Integer, k A...

...的指定个数排序比如说:0123456789(不重复)所有4位数的取法或者所有...
n-1]); count++; } printf("总排序方法:%d\\n",count); }可以看到,总的排序方式是3024=9*8*7*6 根据排列组合的知识可以知道,这就相当于9个数中任意找4个出来排序的方法,也就是C94 结果正确。注意结果一共有 3024行,我只截了一部分。

用C语言数组求4个不同的数字能组成多少个不同的4位数
请你看看排列组合。这对你以后的开发很有帮助,是计算机科学的数学基础。4个数字,如果不重复的就是4*3*2*1 = 24 如果可以重复的话就是4*4*4*4 = 256

用C语言编程求1234四个数能组成多少互不相同且不重复的三位数
互不相同且不重复的三位数,即i不等于j且j不等于k且i不等于j,用C语言逻辑表达式描述为:i!=j&&j!=k&&i!=k三个位置,每一个位置有1、2、3、4,四种可选值,因此其排列数为4^3 = 64种排列组合方法,三个位置互不相同,按分步乘法原理得一共有4x3x2 = 24种排列方法。编写示例代码如下:...

用C语言编写一个排列组合的程序
int len1,len2,len3;void input(int len1,int len2,int len3){ printf("%d %d %d\\n",a[len1],a[len2],a[len3]);} void solve(int len1,int len2,int len3){ input(len1,len2,len3);if(len1==2) return;if(len3<4) len3++;else if(len2<3){ len2++;len3=len2+...

用C语言编写一个排列组合的程序
你的意思是说:输入4个数,然后把这4个数任意排列,然后把组合的个数输出?就是输入1\/2\/3\/4←你可以把它看成16进制数...(谁说16进制说没个位的)然后就排成 1234,4321,1432等?问一下问题:输入的4个数的长度固定吗?(比如都是4位)如果不固定长度一样吗?(比如:1df45.4fda4,324f,da345)

c语言排列组合c语言排列组合
只要C的上面是0,不管下面是什么都等于1。分子是从5开始递减的两个数字相乘,即5*4;分母为从1开始递增的两个数字,即1*2;所以结果为5*4÷(1*2)=10;同理:c53=5*4*3÷(1*2*3)=10 c54=5*4*3*2÷(1*2*3*4)=5 从n个不同元素中,任取m(m≤n,m与n均为自然数,下同)个...

相似回答