标题:n个数的全排列
只看楼主
DAILUYAO
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2018-6-4
结帖率:0
已结贴  问题点数:20 回复次数:5 
n个数的全排列
编写一个函数,用递归求解,输入n,将n个数字1.2.3....n的所有排列按字典顺序枚举出来
C语言入门  在线等 很急啊 谢谢大家了
搜索更多相关主题的帖子: 个数 排列 枚举 C语言 入门 
2018-06-04 14:17
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:10 
程序代码:
#include <iostream>
using namespace std;

 void  output(char d[],int n)       // 输出
{  
      for (int i=0;i<n;i++)
        cout<<d[i];   
      cout<<" ";
}
void swap(char &x, char &y)  //交换
{
    char t = x;
    x = y;
    y = t;
}
void perm(char d[],int n,int j)  //  j起始下标
{
     if (j==n)
           output(d,n);                  // 输出
     else
         for (int i=j;i<n;i++) {
               if (i!=j)
                  swap(d[j],d[i]);     // 交换
               perm(d,n,j+1);    //递归求排列
               if (i!=j)
                  swap(d[j],d[i]);}    //  恢复 
}
int main()
{
    char a[] = {'1','2','3','4','5','6','7','8','9','0'};
    int n;
    cout<<"请输入n:\n";
    cin>>n;
    perm(a,n,0);
    cout<<endl;
    return 0;
}
2018-06-04 16:41
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:10 
以下是引用自学的数学在2018-6-4 16:41:48的发言:

    char a[] = {'1','2','3','4','5','6','7','8','9','0'};
}

直接写
 char a[] = "1234567890";

会方便很多

https://zh.
2018-06-04 16:56
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:0 
回复 3楼 lin5161678
你那样,是行不通的。会出现乱码。
2018-06-04 17:03
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:0 
程序代码:
#include <stdio.h>  
/************************************************************************/  
/* 功能:实现两个整形参数值交换 
/* 参数: 
/*       lhs--int类型的指针,指向待交换数1的地址 
/*       rhs--int类型的指针,指向待交换数2的地址 
/************************************************************************/  
void Swap(int *lhs, int *rhs)  
{  
    int t = *lhs;  
  
    *lhs = *rhs;  
    *rhs = t;  
}  
/************************************************************************/  
/* 功能:实现全排列功能 
/* 参数: 
/*       source--整数数组,存放需要全排列的元素 
/*       begin --查找一个排列的开始位置 
/*       end   --查找一个排列的结束位置,当begin=end时,表明完成一个排列 
/************************************************************************/  
void FullPermutation(int source[], int begin, int end)  
{  
    int i;  
    if (begin >= end) // 找到一个排列  
    {  
        for (i = 0; i < end; i++)  
             printf("%d", source[i]);  
       printf("\n");  
    }  
    else// 没有找完一个排列,则继续往下找下一个元素  
    {  
        for (i = begin; i < end; i++)  
        {  
            if (begin != i)  
            {  
                Swap(&source[begin], &source[i]); // 交换  
            }  
            // 递归排列剩余的从begin+1到end的元素  
            FullPermutation(source, begin + 1, end);  
            if (begin != i)  
            {  
                Swap(&source[begin], &source[i]); // 回溯时还原  
            }   
        }  
    }  
}  
int main()  
{  
    int source[30];  
    int i, count;  
    scanf("%d", &count);  
    // 初始化数组  
    for (i = 0; i < count; i++)  
       source[i] = i + 1;  
    FullPermutation(source, 0, count);  
    return 0;  
} 
2018-06-04 17:13
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
回复 4楼 自学的数学
不会的
你试试看

这两个写法的区别只是
""初始化自带0结尾
这一点在这段代码里面没有影响

https://zh.
2018-06-04 17:34



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-487592-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.177503 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved