给定数列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;
}
: 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;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货