开发者社区> 问答> 正文

设计递归算法生成n个元素的所有排列对象

如题,C/C++,在线等

展开
收起
知与谁同 2018-07-17 14:48:34 1940 0
2 条回答
写回答
取消 提交回答
  • TA有点害羞,没有介绍自己...
    //给你m个数,输出其中包含n个数的所有排列
    #include <iostream>
    using namespace std;

    int data[100];
    void DPpl(int num,int m,int n,int depth)
    {
    if(depth==n)
    {
    for(int i=0;i<n;i++)
    cout<<data[i]<<" ";
    cout<<endl;
    }
    for(int j=0;j<m;j++)
    {
    if((num&(1<<j))==0)
    {
    data[depth]=j+1;
    DPpl(num+(1<<j),m,n,depth+1);
    }
    }
    }
    int main()
    {
    //DPpl(0,5,1,0);
    //DPpl(0,5,2,0);
    DPpl(0,5,3,0);//5个数输出包含其中3个数的排列
    //DPpl(0,5,4,0);
    //DPpl(0,5,5,0);
    return 0;
    }
    程序不长,是我以前帮别人写的。
    在我空间里面有不过程序就是上面的。
    http://hi.baidu.com/huifeng00/blog/item/cd01b0152e69f503c93d6d8f.html
    2019-07-17 22:55:21
    赞同 展开评论 打赏
  • Nothing for nothing.
    #include<iostream>
    #include<cmath>
    using namespace std;

    int count(int n) //算n的阶乘——因为n个数能组成n!个数
    {
    if(n<1)
    {
    cout<<"输入也错。";
    exit(0);
    }
    else
    if(n==1)
    return 1;
    else
    return count(n-1)*n;
    }

    int pow10(int n) //算出10的n次方
    {
    int a;
    if(n==0)
    return 1;
    else
    for(int i=1;i<=n;i++)
    a=10*pow10(n-1);
    return a;
    }
    int * comm(int n) //组合n!个数(这里用递归算)
    {
    int *a=new int[count(n)];
    if(count(n)==1)
    a[0]=1;
    else
    {
    int *b=new int[count(n-1)];
    b=comm(n-1);
    for(int i=0;i<count(n-1);i++)
    for(int j=0;j<n;j++)
    a[i*n+j]=(b/pow10(j)*10+n)*pow10(j)+b%pow10(j);
    }
    return a;
    }
    void main()
    {
    int n;
    cout<<"请输入n=";
    cin>>n;
    int *a=new int[count(n)];
    a=comm(n);
    cout<<"1-"<<n<<"自然数所有的排列组合为:\n";
    for(int i=0;i<count(n);i++)
    cout<<a<<" ";
    }

    =======================================
    #define MAX 1000
    #include<stdio.h>

    void DispArrangement(int a[MAX], int n, int deepth)
    {
    int i, temp;
    if(deepth == 1) {
    for(i = 1; i <= n; i ++) {
    printf("%d", a);
    }
    printf("\n");
    } else {
    for(i = 1; i <= deepth; i ++ ){
    temp = a[n - deepth + 1];
    a[n - deepth + 1] = a[n - deepth + i];
    a[n - deepth + i] = temp;
    DispArrangement(a, n, deepth - 1);
    temp = a[n - deepth + 1];
    a[n - deepth + 1] = a[n - deepth + i];
    a[n - deepth + i] = temp;
    }
    }
    }

    int main(void)
    {
    int i, n, a[MAX];
    scanf("%d", &n);
    for(i = 1; i <= n; i ++ ) {
    a = i;
    }
    DispArrangement(a, n, n);
    return 0;
    }
    2019-07-17 22:55:21
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
袋鼠云基于实时计算的反黄牛算法 立即下载
Alink:基于Apache Flink的算法平台 立即下载