求c语言多数排列方案递归的代码 样列输入 3 输出 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1

输出是123 132 213 231 312 321

第1个回答  2013-07-07
#include "stdio.h"
int d[100];
int dn; // 全排列 总数
void init(int d[],int n) // 填初始数据
{
dn=n;
for (int i=0;i<n;i++)
d[i]=i+1;
}
void output(int d[]) // 输出
{
for (int i=0;i<dn;i++)
printf("%d ",d[i]);
printf("\n");
}
//----交换法递归全排列算法---- ---------------------------
void swap(int *x,int *y) // 交换子程序
{
int t=*x;
*x=*y; *y=t;
}
void perm(int d[],int n) // n个数
{
if (n==1)
output(d); // 输出
else
for (int i=0;i<n;i++) // 逐一与末尾交换
{
if (i<n-1) // 与自已不交换
swap(&d[i],&d[n-1]); // 与末尾交换
perm(d,n-1); // 向前递归, n减1
if (i<n-1)
swap(&d[i],&d[n-1]); // 恢复交换
}
}
//-----------------------------------------
main()
{
init(d,3);
perm(d,3);
}

以前编的,结果是对的,现优化了一下,已忘了差不多了。本回答被提问者和网友采纳
第2个回答  2013-07-07
你在百度上搜吧,直接搜全排列就是了!!!搜得到!!!如果要用stl库函数,可以直接用next_permutation()

求c语言多数排列方案递归的代码 样列输入 3 输出 1 2 3 1 3 2 2 1...
int d[100];int dn; \/\/ 全排列 总数 void init(int d[],int n) \/\/ 填初始数据 { dn=n;for (int i=0;i<n;i++)d[i]=i+1;} void output(int d[]) \/\/ 输出 { for (int i=0;i<dn;i++)printf("%d ",d[i]);printf("\\n");} \/\/---交换法递归全排列...

输入n, 输出1-n的n!的序列 如输入 3 输出: 1 2 3 1 3 2 2 1 3 2 3...
{ int a[3] = {1, 2, 3};Perm(a, 0, 3);return 0;} 可能标点符号这些因为是中文输入法不对 其他的应该没问题

用C语言怎么能输出 1 2 3 4 1 2 4 3 1 3 2 4 1 3 4 2 1 4 2 3 1 4...
if(length>1){\/\/大于1,则递归 for(i=0;i<length;i++){\/\/依次遍历数组里的length个数,输出以每个数开头的全排列 sprintf(tpre,"%s%d",prefix,numbers[i]);\/\/记录下一层的prefix for(j=0;j<length-1;j++){\/\/构建下一层排列用的数组,由去掉numbers中的第i个数构成 if(j...

用C语言写一个输出1,2,3,4,5五个数的代码
include<stdio.h>int main() { int x = 0; while(x < 5) { x = x + 1; printf("%d\\n",x); } return 0;}

C语言编程:输入3个整数,输出它们的1次幂、2次幂和3次幂。
\/*输入3个整数,输出它们的1次幂、2次幂和3次幂*\/ include<stdio.h> define p(A) printf("%d\\t%d\\t%d\\n",mypow(A,1),mypow(A,2),mypow(A,3))void main(void){ int a,b,c;int mypow(int,int);printf("输入三个整数: ");scanf("%d%d%d",&a,&b,&c);p(a);p(b);p(c)...

c语言在线解题2、 编写程序实现输入整数n,输出如下所示数字组成的图形...
一步一步来,你把下面三段程序都看一下运行结果,就能做出来了 首先 for(int j=1;j<=5;j++){ printf("%d",j);} 然后 for(int i=1;i<=n;i++){ for(int j=1;j<=i;j++){ printf("%d",j);} printf("\\n");} 最后 for(int i=1;i<=n;i++){ for(int j=1;j<=i;...

c语言的函数递归调用问题求讲解下面的程序 为什么输出4,3,2,1
因为你先做的是f(m,n+1);然后再做的是printf 所以当满足(n<=m) 这个条件的时候是不能输出的 你将 代码改为 include <stdio.h> void f(int m, int n){ if (n <= m){\/***\/ printf("%d ", n);f(m, n+1);\/***\/ } else return;} void main(){ f(4,1);} 输...

在C语言中“输入三个数字,将其颠倒顺序输出。例如输入:1,2,3 输出...
已经编译通过~#include<stdio.h> void main(){ int i,temp;int a[3];for(i=0;i<3;i++){ scanf("%d",&a[i]);} for(i=0;i<2;i++){ temp=a[i];a[i]=a[2-i];a[2-i]=temp;} for(i=0;i<3;i++){ printf("%d",a[i]);} } ...

c语言,递归1~n按字典顺序全排列
includevoidswap(char&a,char&b,charc){c=a;a=b;b=c;}voidperm(char*list,inti,intn){intj,temp;if(i==n){for(j=0;j<=n;j++)printf("%c",list[j]);printf("");}else{for(j=i;j<=n;j++){swap(list[i],list[j],temp);perm(list,i+1,n);swap(list[i],list[j],...

求解c语言题:输入一个任意的三位数,将其各位数字反序输出(例如输入123...
代码如下:include <stdio.h> void main( ){int a,b,c,d;scanf("%d",&a);b= a\/100;c= (a%100) \/10;d=a%10;printf("%d",100*d+10*c+b);}

相似回答
大家正在搜