给定数列1,2,3,,n,n是运行时从键盘输入的,如何编程输出从数列中任选
: m个数的所有排列?可以用递归实现,下面是C++程序,若输入n=3, m=2, 其输出结果为:1 2
3 2
3 1
                   m    m      m-1
基本思路是用公式  C  = C    + C
                   n    n-1    n-1下面的源程序中重要的是函数 m_of_n(), 函数 nswap() 用来交换两个整数。#include <iostream.h>void m_of_n(int m, int n1, int m1, int* a, int head);
void nswap(int& i, int& j);void main()
{
        int n,m;
        cout<<"n, m = \n";                //输出字符:n,m=
        cin>>n>>m;                       //从键盘输入n,m的值        int a[100];
        for(int i=0;i<n;i++) a[i]=i+1;     // 给数组赋初值
        m_of_n(m,n,m,a,0);                 // 调用m_of_n()函数
}void m_of_n(int m, int n1, int m1, int* a, int head)
{
        int i;
        if(m1<0 || m1>n1) return;        if(m1==n1)
        {
                for(i=0;i<m;i++) cout<<a[i]<<' ';    // 输出序列
                cout<<'\n';
                return;
        }
        m_of_n(m,n1-1,m1,a,head);         // 递归调用
        nswap(a[head],a[n1-1+head]);
        m_of_n(m,n1-1,m1-1,a,head+1);     // 再次递归调用
        nswap(a[head],a[n1-1+head]);
}void nswap(int& i, int& j)
{
        int t;
        t=i;
        i=j;
        j=t;
}